有没有办法找到匹配谓词的第一个元素?

时间:2015-02-20 15:28:25

标签: java performance filtering predicate java-stream

使用Java 8+,您可以轻松找到与Predicate匹配的集合的所有元素。

someCollection.stream().filter(somePredicate)

然后你可以找到第一个元素:

someCollection.stream().filter(somePredicate).findFirst()

但问题在于,它针对所有元素运行Predicate。是否有一种干净的方法只能在找到第一个匹配项之前对元素运行Predicate,然后返回它,就像anyMatch一样(但返回boolean告诉是否找到了一个) ?

1 个答案:

答案 0 :(得分:6)

它完全符合您的要求。它不会遍历所有元素。 filter方法会创建一个流,并在其上findFirst创建另一个流。

因此,当您尝试获取在findFirst()之后创建的流的元素时,您将只获得与谓词匹配的第一个元素。

检查的最佳方法是在谓词中添加打印行或类似内容。

创建一个整数流,例如从0到10,并创建一个打印数字的谓词,然后检查它是否除以3.你将打印出来:0,1,2,3就是这样。

我过去写了一个问题+答案,详细解释它是如何运作的:Understanding java 8 stream's filter method