java - 避免双循环

标签 java jakarta-ee java-8

让我们说出这段代码

  Class A{
       private B;
       private int totalNumberAWithB;
  }      

  enum B {
      type1,type2,type3;
 }

如果我有

  List<A> a;

如果我有一个 A 列表,其中可以有或没有 B 实例,我希望在 TotalNumberAWithB 中包含包含 B 类型的所有 A 的值。

知道如何才能有效地做到这一点。现在我想到的唯一想法是创建一个 B 类型的 Map 编号。然后在完成这个循环后再次执行相同的循环,但这次只是在 A 中设置 B 类型的总值。但对我来说,执行这个双循环似乎效率很低。

有什么建议吗?

最佳答案

在 Java 8 中,您可以对流应用过滤器:

a.stream().filter(e -> e.getB() != null).collect(toList());

或者如果只是想计算,您可以直接求和:

a.stream().filter(e -> e.getB() != null).sum();

过滤谓词可以根据您的需要进行排列,或者您甚至可以映射元素,然后使用归约操作对聚合进行计数。 这个问题可以用 map/reduce 来解决

关于java - 避免双循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34220636/

相关文章:

java - 如何在没有 web 容器的情况下加载 spring

java - 如何使用 Elasticsearch Java Api 使用 query_string 创建查询

tomcat - fatwire可以在tomcat上运行吗?

java - 关于 Java 中的数据库设计方法的问题

java - Log4j线程名称混淆

java - LibGDX 和 Java 8 源代码兼容性

java - GP/GPU : ping pong technique with JOGL

java - 'ExpandableListAdapter' 是抽象的;不能实例化

java - 将文件保存到 Jersey API 中的服务器应用程序目录

java - 使用收集器按两个字段进行分组