Java 流 - 同时进行 anyMatch 和 noneMatch 操作的目的?
Java stream - purpose of having both anyMatch and noneMatch operations?
如果找到元素,anyMatch 操作将 return 为真 - 如果找到匹配元素,noneMatch 操作将 return 为假。
如果找不到匹配元素,anyMatch 操作将 return 假 - 如果找不到匹配元素,noneMatch 操作将 return 真。
因此,我们不能只做一个操作,而不是同时进行这两个操作,还是我遗漏了什么?本质上,anyMatch returning false 是一种评估 noneMatch 谓词真实性的方法。
是的,我们完全可以。不过,至少有一个适度合理的理由:!
将出现在流表达式的最开头,流表达式可以链接很多行,例如你必须写
!collection.stream()
.map(someMapFunction)
.filter(someFilterFunction)
.distinct()
.sorted(myComparator)
.map(someOtherMapFunction)
.filter(someOtherFilterFunction)
.anyMatch(somePredicate)
...当您阅读代码时达到 anyMatch
时,开头的否定更难记住。
(就其价值而言,JDK 的冗余方法通常似乎比我能说出的其他语言要少得多。)
与您 a != b
的原因相同,而不是仅支持 ! (a == b)
:
- 易于使用。
- 目的明确。
如果找到元素,anyMatch 操作将 return 为真 - 如果找到匹配元素,noneMatch 操作将 return 为假。
如果找不到匹配元素,anyMatch 操作将 return 假 - 如果找不到匹配元素,noneMatch 操作将 return 真。
因此,我们不能只做一个操作,而不是同时进行这两个操作,还是我遗漏了什么?本质上,anyMatch returning false 是一种评估 noneMatch 谓词真实性的方法。
是的,我们完全可以。不过,至少有一个适度合理的理由:!
将出现在流表达式的最开头,流表达式可以链接很多行,例如你必须写
!collection.stream()
.map(someMapFunction)
.filter(someFilterFunction)
.distinct()
.sorted(myComparator)
.map(someOtherMapFunction)
.filter(someOtherFilterFunction)
.anyMatch(somePredicate)
...当您阅读代码时达到 anyMatch
时,开头的否定更难记住。
(就其价值而言,JDK 的冗余方法通常似乎比我能说出的其他语言要少得多。)
与您 a != b
的原因相同,而不是仅支持 ! (a == b)
:
- 易于使用。
- 目的明确。