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

 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。


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


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


温温酱
浏览 78回答 3
3回答

鸿蒙传说

看来,您将布尔值收集到列表中的唯一原因是,您可以检查某些布尔值是否是:false如果我选择减少或任何匹配,我不必从地图操作中收集结果 [...]如果至少有一个假的,我只想返回假的。如果是这种情况,那么您绝对应该考虑直接的基于流的方法:return&nbsp;jobs.stream().allMatch(Job::ready);

杨__羊羊

你问利弊。 是最快和最简单的。 是这里最麻烦/最复杂的。但是你的任务很简单,所以这真的重要吗?也许选择使用哪种方法的更好关键是:“哪一种更好可读,更易于理解和可维护?在实际的软件开发中,这种干净的代码方法通常比在运行时中搜寻微秒或源代码中的行数更重要。但话又说回来,我会说这里是最好的。ContainsReducecontainsSystem.out.println(!results.contains(false));那么你实际上和你一样,我肯定会更喜欢它来完成这个具体任务。但同样,真正的差异非常小,我更关心的是该软件的未来维护者的可读性和可理解性。anyMatch(a -> !a)containsreduce

湖上湖

System.out.println(results.stream().reduce((a,&nbsp;b)&nbsp;->&nbsp;a&nbsp;&&&nbsp;b).get());这将始终返回 false,因为 list() 至少有 1 个 。resultsfalse&&将始终检查两个值是否为 true,以将其传递为 。true&nbsp;System.out.println(!results.stream().anyMatch(a&nbsp;->&nbsp;!a));Stream 返回此流(结果)的任何元素是否与提供的谓词匹配。当你这样做的时候,结果在最初为真之后最终会是假的。anyMatch(Predicate predicate)(a -> !a)!results
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java