stream流根据id分组然后累加某一个属性的和
时间: 2024-02-24 14:58:34 浏览: 69
假设我们有一个包含多个对象的列表,每个对象都有一个ID和一个数字属性,现在我们想要按照ID分组,然后计算每个分组中数字属性的总和,可以使用Java 8 Stream的groupingBy()和summingInt()方法来实现。
以下是一个示例代码:
```java
public class Test {
public static void main(String[] args) {
List<Item> itemList = new ArrayList<>();
itemList.add(new Item(1, 10));
itemList.add(new Item(1, 20));
itemList.add(new Item(2, 30));
itemList.add(new Item(2, 40));
itemList.add(new Item(2, 50));
Map<Integer, Integer> sumMap = itemList.stream()
.collect(Collectors.groupingBy(Item::getId, Collectors.summingInt(Item::getNum)));
System.out.println(sumMap);
}
}
class Item {
private int id;
private int num;
public Item(int id, int num) {
this.id = id;
this.num = num;
}
public int getId() {
return id;
}
public int getNum() {
return num;
}
}
```
在这个例子中,我们创建了一个包含5个对象的列表,然后使用groupingBy()方法按照ID进行分组,使用summingInt()方法对每个分组中的数字属性进行累加,最终得到一个Map对象,其中key为ID,value为该ID所对应的数字属性总和。输出结果为:{1=30, 2=120},即ID为1的数字属性总和为30,ID为2的数字属性总和为120。
阅读全文