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

Is there a way to find the first element to match a Predicate?

使用 Java 8+,您可以轻松找到集合中与 Predicate.

匹配的所有元素
someCollection.stream().filter(somePredicate)

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

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

不过,这个问题是 运行 对所有元素都是 Predicate。有没有一种干净的方法只对元素 运行 Predicate 直到找到第一个匹配项,然后 return 它,就像 anyMatch 那样(但是 return是 boolean 告诉是否找到了)?

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

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

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

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

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