我遇到了以下代码片段:

List<String> colors = Arrays.asList("red", "green", "yellow");
Predicate<String> test = n ->
{
    System.out.println("Searching…");
    return n.contains("red");
};
colors.stream().filter(c -> c.length() > 3).allMatch(test);

输出显示给我
Searching...

当我拿走.filter(c -> c.length() > 3)时,它显示了我
Searching...
Searching...

经过一些其他测试,我发现最后一个元素(黄色)从未被测试过!

这是为什么!?

有人可以这么仁慈,并解释其背后的机制!?

非常感激!!!

最佳答案

您叫 allMatch 。这只是想知道“每个项目是否都与该谓词匹配?”。这将遍历数据流并评估每个项目的谓词,直到找到一个错误的谓词为止,因为一旦有了该谓词,就可以确定不是每个项目都与谓词匹配。

医生说

如果不需要确定结果,则可能不会对所有元素都评估谓词。

一旦找到谓词为假的项目,就不会再评估其他项目。

09-10 08:58
查看更多