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 stream forEach filter anyMatch