java - Optional ifPresent() 可以用在更大的表达式中以减轻对 get() 的调用吗?

标签 java lambda java-8 option-type

为了避免调用可能引发异常的 get():

if (a.isPresent())
   list.add(a.get());

我可以将这个表达式替换为:

a.ifPresent(list::add);

但是如果我需要执行一个更大的表达式怎么办:

if (a.isPresent() && b && c)
   list.add(a.get());

是否仍然可以为此使用 lambda 形式来减少对 get() 的调用?

我的用例是尽可能避免 get() 以防止错过可能的未经检查的异常。

最佳答案

我的假设是您必须分别处理其他 boolean,但我可能错了。

if (b && c) {
    a.ifPresent(list::add);
}

实际上,一个奇怪的解决方案可能是:

a.filter(o -> b && c).ifPresent(list::add);

注意

  • 确保查看 shinjw 的解决方案 here第三个例子!

关于java - Optional ifPresent() 可以用在更大的表达式中以减轻对 get() 的调用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46782731/

相关文章:

java - 通过批处理文件设置类路径并安装数据库

java - 自定义二叉搜索树中的最短路径

Java 说 0 年是闰年,但 0 年从未存在过

java - 通过 Jackson 的 ZonedDateTime 往返产生不相等的 ZonedDateTime

java-8 - 无法使用 DateTimeFormatter 解析日期

java - JAAS tomcat 登录模块传递 ip 地址的可能方法

python - Python代码中的 `lambda`是什么?它如何与 `key` 的 `sorted` 、 `sum` 等参数一起使用?

c# - lambda 的保护检查

java - 使用诸如 ".lambda$null$2"& 和 "$$Lambda$"之类的 lambda 解释 Java 堆栈跟踪

java - Java 9+ 项目是否可以不受影响地使用 Java 8 中的单独源模块?