繁体   English   中英

可以在较大的表达式中使用可选的ifPresent()来缓解对get()的调用吗?

[英]Can Optional ifPresent() be used in a larger expression to mitigate a call to get()?

为了避免调用可以抛出异常的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的解决方案,以获取第三个示例!

在以前的答案中添加一个变体:

a.ifPresent(obj -> { if (b && c) list.add(obj); });

如果a存在。 检查然后添加未包装的对象

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM