【发布时间】:2018-07-27 13:36:57
【问题描述】:
所以,我有一个ArrayList 的自动生成字符串。我想找到包含某个字符的第一个元素,否则如果没有与此过滤器匹配的元素,则应用另一个过滤器。换一种方式,我想返回null对象。
所以我写了这个 lambda 表达式:
str.stream()
.filter(s -> s.contains("q"))
.findFirst()
.orElseGet(() -> str.stream()
.filter(s -> s.contains("w"))
.findFirst()
.orElseGet(null))
但如果没有一个元素与这两个过滤器匹配,我将出现 NullPointerException。怎么样,我可以得到类似的东西:return null?
【问题讨论】:
-
不要。相反,返回一个
Optional并让客户决定如何处理它。 -
但是想一想,您真的想返回那个
null以便进一步解决问题吗?可能是默认值?或者更好地早点抛出异常? -
@Eugene 使用 FP 和 null... 这不是最好的选择,但如果必须,我宁愿先抛出异常而不是处理 null。
标签: java lambda java-8 java-stream optional