java:reduce vs anyMatch vs contains

eal*_*eon 6 java java-8 java-stream

 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));
Run Code Online (Sandbox Code Playgroud)

OUTPUT:
假的
假的
假的

仅供参考,结果是map + collect op的结果

List<Job> jobs;
List<Boolean> results = job.stream().map(j -> j.ready()).collect(Collector.toList())
Run Code Online (Sandbox Code Playgroud)

如果选择reduce或anyMatch,则不必从map操作中收集结果。

从结果(是一个布尔值列表)中,如果至少存在一个false,我只想返回false。

我可以通过reduce或anyMatch做到这一点。我有点不喜欢reduce的Optional,我有点不喜欢我必须否定anyMatch

是否有使用两者的利弊?

Mis*_*sha 6

您似乎将布尔值收集到列表中的唯一原因是可以检查是否有以下几种false

如果选择reduce或anyMatch,则不必从映射操作中收集结果,只要有至少一个假,我只想返回假。

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

return jobs.stream().allMatch(Job::ready);
Run Code Online (Sandbox Code Playgroud)