查找匹配的谓词并使用iterable.tryFind从java中的列表返回元素

时间:2014-05-21 01:22:35

标签: java guava

我有一个列表,我想从列表中找到一个与谓词匹配的元素。我在列表中找到与第一个谓词匹配的元素,如果第一个谓词不返回true,则它与第二个谓词匹配。

以下是一个例子:

情况1:

result = iterable.tryFind(List, Predicates.or(predicate1, predicate2)).orNull();

这段代码的问题是它找到匹配任何谓词的第一个元素。即使列表中的第二个元素匹配第一个谓词,在我的情况下应该给予更高的优先级。在这种情况下,我期望结果在这里作为第二个元素,但是获得第一个元素(因为它是第一个元素)它匹配其中一个谓词)。

情况2:

result = iterable.tryFind(List, Predicates.and(predicate1, predicate2)).orNull();

如果第一个谓词返回false,这显然不起作用。

案例3:

result = iterable.tryFind(List, predicate1).orNull();

if(result == null)
result = iterable.tryFind(List, predicate2).orNull();

这对我有用,但它看起来很乱,并且无法实现函数式编程的目的。

有没有其他方法可以从列表中获取适用于我的场景的元素?

1 个答案:

答案 0 :(得分:5)

您可以使用Optional.or代替Predicate.or来获得您想要的内容:

result = Iterables.tryFind(list, predicate1)
         .or(Iterables.tryFind(list, predicate2))
         .orNull();