有没有办法找到匹配谓词的第一个元素?
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
使用 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