让我们说出这段代码
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/