为了账号安全,请及时绑定邮箱和手机立即绑定

java:减少与任何匹配与包含

java:减少与任何匹配与包含

温温酱 2022-09-22 19:19:42

 List<Boolean> results = new ArrayList<>();

 results.add(true);

 results.add(true);

 results.add(true);

 results.add(false);


 if (results.contains(false)) {

     System.out.println(false);

 } else {

     System.out.println(true);

 }


 System.out.println(results.stream().reduce((a, b) -> a && b).get());

 //System.out.println(!results.stream().anyMatch(a -> a == false));

 System.out.println(!results.stream().anyMatch(a -> !a));

输出:


仅供参考,结果是地图+收集操作的结果


List<Job> jobs;

List<Boolean> results = job.stream().map(j -> j.ready()).collect(Collector.toList())

如果我选择“减少”或“任何匹配”,则不必从地图操作中收集结果。


从布尔值列表的结果来看,如果至少有一个 false,我只想返回 false。


我可以通过减少或任何匹配来做到这一点。我有点不喜欢从减少的可选,我有点不喜欢我必须否定任何匹配


使用两者有什么优点/缺点吗?


查看完整描述

3 回答

?
鸿蒙传说

TA贡献1533条经验 获得超7个赞

看来,您将布尔值收集到列表中的唯一原因是,您可以检查某些布尔值是否是:false

如果我选择减少或任何匹配,我不必从地图操作中收集结果 [...]如果至少有一个假的,我只想返回假的。

如果是这种情况,那么您绝对应该考虑直接的基于流的方法:

return jobs.stream().allMatch(Job::ready);



查看完整回答
反对 回复 2022-09-22
?
杨__羊羊

TA贡献1608条经验 获得超7个赞

你问利弊。 是最快和最简单的。 是这里最麻烦/最复杂的。但是你的任务很简单,所以这真的重要吗?也许选择使用哪种方法的更好关键是:“哪一种更好可读,更易于理解和可维护?在实际的软件开发中,这种干净的代码方法通常比在运行时中搜寻微秒或源代码中的行数更重要。但话又说回来,我会说这里是最好的。ContainsReducecontains

System.out.println(!results.contains(false));

那么你实际上和你一样,我肯定会更喜欢它来完成这个具体任务。但同样,真正的差异非常小,我更关心的是该软件的未来维护者的可读性和可理解性。anyMatch(a -> !a)containsreduce


查看完整回答
反对 回复 2022-09-22
?
湖上湖

TA贡献1669条经验 获得超2个赞

System.out.println(results.stream().reduce((a, b) -> a && b).get());

这将始终返回 false,因为 list() 至少有 1 个 。resultsfalse

&&将始终检查两个值是否为 true,以将其传递为 。true

 System.out.println(!results.stream().anyMatch(a -> !a));

Stream 返回此流(结果)的任何元素是否与提供的谓词匹配。当你这样做的时候,结果在最初为真之后最终会是假的anyMatch(Predicate predicate)(a -> !a)!results


查看完整回答
反对 回复 2022-09-22

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信