我有一些处理逻辑:
public void handle(String uniqueId) {
Optional<Config> config = configDAO.find(uniqueId);
if (!config.isPresent()) {
LOGGER.warn("config not found for uniqueId '{}'", uniqueId);
} else {
internalHandle(config.get());
}
}
换句话说,我想根据 Optional 值的存在运行两个 void 操作之一。
我非常担心在我的代码中不使用isPresent
,但看起来 java8 没有提供任何我可以替换此代码的内容。
正如在java9的注释中提到的,您可以使用ifPresentOrElse
:
config.ifPresentOrElse(c -> internalHandle(c),
() -> LOGGER.warn("config not found for uniqueId '{}'", uniqueId));
使用if else
语句实现ifPresentOrElse
如果非常简单的话。从源代码:
public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction) {
if (value != null) {
action.accept(value);
} else {
emptyAction.run();
}
}
所以我想在java 8的情况下使用if else
逻辑是合适的,就像在你的例子中一样。