java - Java 谓词背后的机制
问题描述
我遇到了这个代码片段:
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
。这只是想知道“每个项目都匹配这个谓词吗?”。这将遍历流并评估每个项目的谓词,直到找到一个为假的,因为一旦找到它,它就可以肯定地说并非每个项目都与谓词匹配。
文档说
如果不需要确定结果,则可能不会评估所有元素的谓词。
一旦找到谓词为假的项目,它就不会评估任何其他项目。
推荐阅读
- swift - Https 可调用函数 - Firebase
- java - 如何使用 Room 库根据外键在 recyclerview 中显示数据
- laravel - 如何使用 l5-swagger 指定附加属性
- google-chrome-extension - 谷歌浏览器扩展中数组的本地存储
- firebase - 使用 firebase 云消息进行地理定位
- c# - 错误 CS0311 从树派生有序树
- c# - 在“PT5M37S”之前没见过这种时间格式
- javascript - 如何从 vueJs 中的对象数组制作对象数组?
- linux-kernel - 无法从 c7 elrepo kernel-lt-4.4.236-1.el7.elrepo.nosrc.rpm 提取内核源 xz
- ruby-on-rails - 带有 2 个参数的 Ruby on Rails 路由未正确路由