Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java谓词背后的机制_Java_Java Stream_Predicate - Fatal编程技术网

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”
,因此只有
搜索…
,另一方面,当
过滤器被移除时,有两个
搜索。。。正在搜索…