避免双循环

时间:2015-12-11 09:57:28

标签: java java-ee java-8

让我们说这段代码

  Class A{
       private B;
       private int totalNumberAWithB;
  }      

  enum B {
      type1,type2,type3;
 }

如果我有

  List<A> a;

如果我有一个他们可以拥有或不拥有B实例的A列表,我希望在totalNumberAWithB中包含所有包含B类型的A的值。

任何想法我怎样才能有效地做到这一点。现在我唯一的想法是创建一个B类型的Map数。然后在完成此循环之后再次执行相同的循环,但这次只是在A中设置B类型的总值。但是对我来说这个双循环似乎很不合适。

有任何建议吗?

1 个答案:

答案 0 :(得分:1)

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

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

或者如果只是想算数,你可以总结:

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

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