Java流 - 同时具有anyMatch和noneMatch操作的目的?

时间:2016-01-29 19:24:30

标签: java java-stream matching operations

如果找到一个元素,anyMatch操作将返回true - 如果找到匹配元素,则noneMatch操作将返回false。

如果找不到匹配元素,则anyMatch操作将返回false - 如果找不到匹配元素,则noneMatch操作将返回true。

因此,我们不是只进行这两项操作,或者是否缺少某些操作,而不是同时进行这两项操作?实质上,anyMatch返回false是一种评估noneMatch谓词真实性的方法。

2 个答案:

答案 0 :(得分:5)

是的,我们完全可以。但是,至少有一个中等合理的理由:!将在流表达式的最开始处进行,该表达式可以链接多行,例如你必须写

 !collection.stream()
    .map(someMapFunction)
    .filter(someFilterFunction)
    .distinct()
    .sorted(myComparator)
    .map(someOtherMapFunction)
    .filter(someOtherFilterFunction)
    .anyMatch(somePredicate)

...当你在阅读代码时到达anyMatch时,开头的否定就更难记住了。

(对于它的价值,JDK通常似乎比我可以命名的其他语言少得多。)

答案 1 :(得分:5)

您拥有a != b的原因相同,而不仅仅支持! (a == b)

  • 易于使用。
  • 目的明确。