java - 在可选的 Java 8 上执行 void 操作
问题描述
我有一些处理逻辑:
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());
}
}
换句话说,我想运行两个 void 操作之一,基于 Optional 值的存在。
我非常担心不在isPresent
我的代码中使用,但看起来 java8 没有提供任何我可以替换此代码的东西。
解决方案
正如java9中的评论中提到的那样,您可以使用ifPresentOrElse
:
config.ifPresentOrElse(c -> internalHandle(c),
() -> LOGGER.warn("config not found for uniqueId '{}'", uniqueId));
ifPresentOrElse
if 非常简单的 usingif else
语句的实现。从源代码:
public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction) {
if (value != null) {
action.accept(value);
} else {
emptyAction.run();
}
}
所以我想if else
在java 8的情况下使用你的例子中的逻辑是合适的。
推荐阅读
- python - 如何解决:“整数预期浮动”?
- google-bigquery - 如何通过迭代向现有表添加唯一 ID
- vue.js - 如何使用 Vue 路由器更改页面图标 + 标题
- javascript - 用户选择单选按钮后需要电话或电子邮件输入
- javascript - 在 Javascript if else 语句中,只有 if 被执行,即使它不是真的
- ios - 如何在快速单击按钮时从情节提要中调用xib文件
- swift - 我没有迅速得到不安全的指针
- html - 如何确定 ap 的坐标:pe 上的对话框:documentViewer
- image - 如何创建一个根据某些图像大小进行自我调整的小部件?
- react-native - 没有在formik中用reactnative调用handleSubmit?