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

Posted

技术标签:

【中文标题】Java 流 - 同时具有 anyMatch 和 noneMatch 操作的目的?【英文标题】:Java stream - purpose of having both anyMatch and noneMatch operations? 【发布时间】:2016-05-07 15:45:28 【问题描述】:

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

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

因此,我们不能同时使用这两种操作,而是只使用一种操作,还是我错过了什么?本质上,anyMatch 返回 false 是一种评估 noneMatch 谓词真假的方法。

【问题讨论】:

尝试在空流上分析这些方法的结果 @Ferrybig:anyMatch 在空流上返回 false,noneMatch 在空流上返回 true。所以 OP 的观察适用于空流。 【参考方案1】:

同样的原因你有a != b,而不是只支持! (a == b)

易于使用。 目的明确。

【讨论】:

【参考方案2】:

是的,我们完全可以。不过,至少有一个适度合理的理由:! 将出现在流表达式的开头,该表达式可以链接很多行,例如你必须写

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

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

(无论如何,JDK 的冗余方法似乎比我能说出的其他语言少得多。)

【讨论】:

以上是关于Java 流 - 同时具有 anyMatch 和 noneMatch 操作的目的?的主要内容,如果未能解决你的问题,请参考以下文章

Java中anyMatch()allMatch()noneMatch()用法详解

如何知道java-8中的哪个元素匹配anymatch?

Java 8 stream forEach filter anyMatch

《Java8实战》 - 读书笔记 - Stream流的基本用法

如何使用流解决以下练习

JDK1.8新特性——Stream