Java Predicates背后的机制



我遇到了这个代码片段:

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 的项目,它就不会计算任何其他项目。

最新更新