我遇到了以下代码片段:
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
。这只是想知道“每个项目是否都与该谓词匹配?”。这将遍历数据流并评估每个项目的谓词,直到找到一个错误的谓词为止,因为一旦有了该谓词,就可以确定不是每个项目都与谓词匹配。
医生说
如果不需要确定结果,则可能不会对所有元素都评估谓词。
一旦找到谓词为假的项目,就不会再评估其他项目。