java - 如何使用 Optional 的 ifPresentOrElse 返回布尔值?
问题描述
我已经有一段时间没有与 Optional 联系了,但我有一个问题。
如何使用 Optional 转换下面的 if else 语句?由于 ifPresentOrElse 没有返回任何内容,因此它似乎无法返回 true 或 false。
有什么办法吗?或者像以前一样使用 if else 语句是否正确?
// Using if else statement
if (obj != null) {
// someting to do
return true;
} else {
// someting to do
return false;
}
// Using Optional
Optional.ofNullable(obj)
.ifPresentOrElse(
val -> {
// if obj is not null
// someting to do
// return true
}
, () -> {
// if obj is null
// someting to do
// return false
}
);
解决方案
如果你得到一个Optional
,就做
return optional.isPresent();
否则没有理由使用Optional
:
return obj != null;
如果你还想要副作用,你可以这样做:
public static void main(String[] args) {
Optional<String> present = Optional.ofNullable("Data");
Optional<String> absent = Optional.empty();
System.out.printf("Value was %s\n", doSomething(present)? "present" : "absent");
System.out.printf("Value was %s\n", doSomething(absent)? "present" : "absent");
}
public static boolean doSomething(Optional<String> opt)
{
opt.ifPresentOrElse(
v -> { System.out.printf("value is '%s'\n",v); },
()-> { System.out.println("value is absent"); }
);
return opt.isPresent();
}
推荐阅读
- java - 如何在 Linux 中使用 Java 将变量添加到文件路径?
- swift - GetStream EnrichedActivity 类的复制问题
- node.js - 在 Atom 编辑器中安装 Eslint 时收到警告
- python - 要求确认后如何将数据发送到表单中查看?
- reactjs - ReactJs:`npm run build` 失败,退出状态为 1
- python - 如何使 glob.glob() 深度优先?
- php - 如何进行自定义电子邮件验证(Laravel 5.8)?
- sql - 如何从sql数据库中备份一行?
- jpa - persistence.xml 文件和 hibernate.conf.xml 文件有什么不同,在什么场景下我们应该哪个文件
- swift - 我对 AppDelegate 中的变量有疑问