我遇到了这个代码片段:
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
.这只想知道"每个项目都与此谓词匹配吗?这将遍历流并计算每个项目的谓词,直到找到一个假的谓词,因为一旦它有了它,它就可以肯定地说不是每个项目都与谓词匹配。
文档说
如果不是确定结果所必需的,则可能不会计算所有元素上的谓词。
一旦找到谓词为 false 的项目,它就不会计算任何其他项目。