Rom*_*kyi 4 java lambda optional java-8 java-stream
所以,我有一个ArrayList自动生成的字符串.我想找到包含某个字符的第一个元素,否则如果没有一个元素与此过滤器匹配,则应用另一个过滤器.换句话说,我想要返回null对象.
所以我写了这个lambda表达式:
str.stream()
.filter(s -> s.contains("q"))
.findFirst()
.orElseGet(() -> str.stream()
.filter(s -> s.contains("w"))
.findFirst()
.orElseGet(null))
Run Code Online (Sandbox Code Playgroud)
但如果没有一个元素匹配这两个过滤器,我将有NullPointerException.怎么样,我能得到类似的东西:return null?
除非我遗漏了一些显而易见的东西,否则只是.orElse(null)代替最后一个orElseGet.orElseGet接受一个Supplier你传递一个null,调用get()一个空引用,好吧......
另一种更简单的方法:您可以过滤包含qor的字符串w,然后排序以移动包含q第一个的字符串,首先查找,如果可选为空则返回 null:
str.stream()
.filter(s -> s.contains("q") || s.contains("w"))
.sorted((s1, s2) -> s1.contains("q") ? -1 : 1 )
.findFirst()
.orElse(null);
Run Code Online (Sandbox Code Playgroud)
.sorted((s1, s2) -> s1.contains("q") ? -1 : 1 )将移动包含第一个的字符串"q"。q由于流仅根据包含或 的值进行过滤w,因此返回 null 只会发生不保留任何元素的情况。
| 归档时间: |
|
| 查看次数: |
586 次 |
| 最近记录: |