我有一个问题-我有元素列表A:
class A {
String fieldA;
int fieldB
}
我想将具有相同fieldA的所有元素合并到一个元素,并以此方式汇总fieldB的所有值:
el1 = AAA 5
el2 = AAA 7
el3 = AAA 2
结果:
one element: AAA 14
如何使用Java 8 Streams做到这一点?
因此,最后,我的列表中的元素必须比开始时少。
我必须找到具有相同fieldA的所有元素,然后将它们合并到一个具有fieldB汇总的元素中。
谢谢!
最佳答案
如果您的 class 是可变的,那么您可以执行类似的操作。
List<A> out = list.stream()
.collect(Collectors
.collectingAndThen(
Collectors.toMap(ele -> ele.getFieldA(), Function.identity(), (a, b) -> {
a.setFieldB(a.getFieldB() + b.getFieldB());
return a;
}), m -> new ArrayList<>(m.values())));
在这里,您首先将创建一个类型的地图
Map<fieldA, A>
将A(对象)fieldB值作为对应的fieldA值的所有fieldB值之和,然后将Map的值集简单转换为列表。
希望能帮助到你。