java8 按对象A字段分组,按属性B字段求和,返回对象集合
时间: 2024-02-02 07:02:26 浏览: 75
Java8 stream 中利用 groupingBy 进行多字段分组求和案例
5星 · 资源好评率100%
可以使用Java 8的Stream API来实现按对象A字段分组,按属性B字段求和,返回对象集合的功能。具体实现可以参考下面的代码:
假设有一个对象类A,其中包含字段a和字段b,需要按字段a分组,按字段b求和,返回对象集合List<A>:
```java
public class A {
private String a;
private int b;
// 省略构造方法和getter/setter方法
}
```
可以使用下面的代码实现按字段a分组,按字段b求和,返回对象集合List<A>:
```java
List<A> list = new ArrayList<>(); // 原始对象集合
Map<String, List<A>> map = list.stream().collect(Collectors.groupingBy(A::getA)); // 按字段a分组
List<A> result = new ArrayList<>(); // 结果对象集合
map.forEach((key, value) -> {
int sum = value.stream().mapToInt(A::getB).sum(); // 按字段b求和
result.add(new A(key, sum)); // 构造新对象并添加到结果对象集合中
});
```
上述代码中,首先使用stream()方法将原始对象集合转换为Stream对象,然后使用groupingBy()方法按字段a分组,并将结果保存到Map对象中。接着,使用forEach()方法遍历Map对象,对每个分组进行处理。对于每个分组,使用mapToInt()方法将其转换为IntStream对象,然后使用sum()方法求和。最后,使用构造方法构造新对象,并将其添加到结果对象集合中。最终返回结果对象集合List<A>。
阅读全文