我有一个列表,我想从列表中找到一个与谓词匹配的元素.我在列表中找到了与第一个谓词匹配的元素,如果第一个谓词没有返回true,则它与第二个谓词匹配.
这是一个例子:
情况1:
result = iterable.tryFind(List, Predicates.or(predicate1, predicate2)).orNull();
Run Code Online (Sandbox Code Playgroud)
这段代码的问题是它找到了匹配任何谓词的第一个元素.即使列表中的第二个元素匹配第一个谓词,在我的情况下应该给予更高的优先级.在这种情况下,我期望结果在这里作为第二个元素,但获得第一个元素(因为它是第一个元素)它匹配其中一个谓词).
案例2:
result = iterable.tryFind(List, Predicates.and(predicate1, predicate2)).orNull();
Run Code Online (Sandbox Code Playgroud)
如果第一个谓词返回false,这显然不起作用.
案例3:
result = iterable.tryFind(List, predicate1).orNull();
if(result == null)
result = iterable.tryFind(List, predicate2).orNull();
Run Code Online (Sandbox Code Playgroud)
这对我有用,但它看起来很乱,并且破坏了函数式编程的目的.
有没有其他方法从列表中获取适用于我的场景的元素?
您可以使用Optional.or而不是Predicate.or获得您想要的东西:
result = Iterables.tryFind(list, predicate1)
.or(Iterables.tryFind(list, predicate2))
.orNull();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8253 次 |
| 最近记录: |