Java stream()。noneMatch(...)和!stream()。anyMatch(...)之间的区别

Fla*_*oth 2 java java-8 java-stream

如果我这样做,性能或其他方面是否有差异?

  1. list.stream().noneMatch(...)
  2. !list.stream().anyMatch(...)

rge*_*man 7

这两个noneMatchanyMatch的短路流操作。这意味着当结果已知时,他们将停止处理其输入。

在您的情况下,它们在找到与传入的谓词匹配时都会停止。唯一的区别是,noneMatchfalse在匹配anyMatch时返回并且将返回true。您对的否定结果anyMatch使这两个表达式在逻辑上相等。

假设list相同Predicate,那么任何性能差异都可以忽略不计。两种方法都将在第一个匹配项(如果有)时短路,如果没有一个实际匹配项,则会遍历整个列表,并且一个否定运算符也不会有所不同。