Mat*_*ley 3 java java-8 java-stream
我有一个问题 - 我有元素 A 列表:
class A {
String fieldA;
int fieldB
}
Run Code Online (Sandbox Code Playgroud)
我想将具有相同 fieldA 的所有元素合并到一个元素,并以这种方式汇总 fieldB 中的所有值:
el1 = AAA 5
el2 = AAA 7
el3 = AAA 2
Run Code Online (Sandbox Code Playgroud)
结果:
one element: AAA 14
Run Code Online (Sandbox Code Playgroud)
如何使用 Java 8 Streams 来做到这一点?
所以最后我的列表的元素必须比开始时少。我必须找到具有相同 fieldA 的所有元素,并将它们合并到具有求和 fieldB 的一个元素。
谢谢你!
你可以这样做,
List<A> reducedAList = aList.stream()
.collect(Collectors.groupingBy(A::getFieldA, Collectors.summingInt(A::getFieldB)))
.entrySet().stream()
.map(e -> new A(e.getKey(), e.getValue()))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
我们不是替换现有的列表,而是List<A>使用减少的 A 值创建一个新列表。为此,首先创建一个map考虑将 fieldA 的值作为键以及具有相同键作为值的 fieldB 值的总和。然后迭代映射的entrySet,并A从每个条目创建一个新实例并将其收集到容器中。这就是我们所需要的。
| 归档时间: |
|
| 查看次数: |
7311 次 |
| 最近记录: |