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

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

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

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

【问题讨论】:

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

标签: java java-stream matching operations


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-06
      • 2022-12-09
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多