为了避免调用可以抛出异常的get():
if (a.isPresent()) list.add(a.get());
我可以用以下代码替换此表达式
a.ifPresent(list::add);
但是如果我需要执行更大的表达式,例如:
if (a.isPresent() && b && c) list.add(a.get());
是否仍然可以使用lambda表单来减轻对get()的调用?
我的用例是尽可能避免get(),以防止错过可能的未经检查的异常.
我的假设是你必须单独对待其他布尔值,但我可能是错的.
if (b && c) { a.ifPresent(list::add); }
实际上,一个奇怪的解决方案可能是:
a.filter(o -> b && c).ifPresent(list::add);
注意
>请务必查看shinjw的解决方案 here 以获得第三个示例!
翻译自:https://stackoverflow.com/questions/46782731/can-optional-ifpresent-be-used-in-a-larger-expression-to-mitigate-a-call-to-ge