使用Java 8+,您可以轻松找到与Predicate
匹配的集合的所有元素。
someCollection.stream().filter(somePredicate)
然后你可以找到第一个元素:
someCollection.stream().filter(somePredicate).findFirst()
但问题在于,它针对所有元素运行Predicate
。是否有一种干净的方法只能在找到第一个匹配项之前对元素运行Predicate
,然后返回它,就像anyMatch
一样(但返回boolean
告诉是否找到了一个) ?
答案 0 :(得分:6)
它完全符合您的要求。它不会遍历所有元素。 filter
方法会创建一个流,并在其上findFirst
创建另一个流。
因此,当您尝试获取在findFirst()
之后创建的流的元素时,您将只获得与谓词匹配的第一个元素。
检查的最佳方法是在谓词中添加打印行或类似内容。
创建一个整数流,例如从0到10,并创建一个打印数字的谓词,然后检查它是否除以3.你将打印出来:0,1,2,3就是这样。
我过去写了一个问题+答案,详细解释它是如何运作的:Understanding java 8 stream's filter method