java 8中anyMatch和findAny之间的区别

Meh*_*lik 5 java arrays java-8 java-stream

我有一个,Array并希望在它的元素上执行一些匹配.

我开始知道它可以通过两种方式完成java 8:

String[] alphabet = new String[]{"A", "B", "C"};
Run Code Online (Sandbox Code Playgroud)

anyMatch:

Arrays.stream(alphabet).anyMatch("A"::equalsIgnoreCase)

findAny:

Arrays.stream(alphabet).filter("a"::equalsIgnoreCase).findAny().orElse("No match found"))

据我所知,两人都在做同样的工作.但是,我找不到哪一个更喜欢?

有人可以说清楚两者之间有什么区别.

Dar*_*usz 16

他们在内部做同样的工作,但他们的回报价值是不同的.Stream#anyMatch()返回一个booleanwhile Stream#findAny()返回一个与谓词匹配的对象.

  • @JornVernee findAny code:`if(!stop && predicate.test(t)== matchKind.stopOnPredicateMatches){stop = true; ......这是短路的. (5认同)
  • 他们_almost_做同样的工作.`anyMatch`是一个短路操作,但`filter`将始终处理整个流. (4认同)
  • @JornVernee这是本周第三次!:(是的,它是jdk-9;这是我的默认值.对不起 (2认同)
  • @MehrajMalik嗯,它应该出现在[2017/07/27](http://openjdk.java.net/projects/jdk9/)那不是太久了. (2认同)
  • @JornVernee你可能在这里有一些"实质内容".一个是通过`FindOps`实现的,另一个是通过`MatchOps`实现的.它可以很容易地完成,以便`match`将调用`find`并在生成的`Optional`上返回`isPresent`.我知道在我理解为什么之前我将无法正常睡眠 (2认同)