Java 谓词背后的机制
The mechanic behind 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
打了电话。这就是想知道"does every item match this predicate?"。这将遍历流并评估每个项目的谓词,直到找到一个错误的谓词,因为一旦找到它,它就可以肯定地说并非每个项目都与谓词匹配。
文档说
May not evaluate the predicate on all elements if not necessary for determining the result.
一旦找到谓词为假的项目,它就不会评估任何其他项目。
我遇到了这个代码片段:
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
打了电话。这就是想知道"does every item match this predicate?"。这将遍历流并评估每个项目的谓词,直到找到一个错误的谓词,因为一旦找到它,它就可以肯定地说并非每个项目都与谓词匹配。
文档说
May not evaluate the predicate on all elements if not necessary for determining the result.
一旦找到谓词为假的项目,它就不会评估任何其他项目。