让我们说这段代码
Class A{
private B;
private int totalNumberAWithB;
}
enum B {
type1,type2,type3;
}
如果我有
List<A> a;
如果我有一个他们可以拥有或不拥有B实例的A列表,我希望在totalNumberAWithB中包含所有包含B类型的A的值。
任何想法我怎样才能有效地做到这一点。现在我唯一的想法是创建一个B类型的Map数。然后在完成此循环之后再次执行相同的循环,但这次只是在A中设置B类型的总值。但是对我来说这个双循环似乎很不合适。
有任何建议吗?
答案 0 :(得分:1)
在Java 8中,您可以对流应用过滤器:
a.stream().filter(e -> e.getB() != null).collect(toList());
或者如果只是想算数,你可以总结:
a.stream().filter(e -> e.getB() != null).sum();
过滤器谓词可以根据您的需要进行排列,或者您甚至可以映射元素,然后使用reduce操作计算聚合。 这是一个可以通过map/reduce 解决的问题。