Java谓词背后的机制
我遇到了以下代码片段:Java谓词背后的机制,java,java-stream,predicate,Java,Java Stream,Predicate,我遇到了以下代码片段: 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).allMatc
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);
当我把.filter(c->c.length()>3)
拿开时,它显示了我
Searching...
Searching...
Searching...
在其他一些测试之后,我发现最后一个元素(黄色)从未测试过
为什么
有人能这么好心地解释一下它背后的机械师吗
非常感谢 你打过电话。这只是想知道“每个项是否都匹配这个谓词?”。这将遍历流并对每个项的谓词求值,直到找到一个为false的项,因为一旦找到该项,它就可以确定不是每个项都与谓词匹配
医生说
如果不需要确定结果,则不能对所有元素的谓词求值
一旦找到谓词为false的项,它将不计算任何其他项。此外,.filter(c->c.length()>3)
在示例中匹配的元素计数中起作用。当出现时,它将排除匹配的“red”
,因此只有搜索…
,另一方面,当过滤器被移除时,有两个搜索。。。正在搜索…