我发现了这个代码片段:
输出结果显示了。
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...
在做一些其他测试后,我发现最后一个元素(黄色)从未被测试过!
为什么会这样呢?
能否有人友好地解释一下背后的机制吗?
非常感谢!
.filter(c -> c.length() > 3)
在所分享的示例中匹配元素的计数中起着作用。当它存在时,它会排除"red"
的匹配,因此只有Searching...
,而当filter
被移除时,就会出现两个Searching... Searching...
。 - Naman