在Java中,可以使用StreamAPI中的Collectors.groupingBy
方法对数据流进行分组,然后结合Collectors.summingInt
、Collectors.summingLong
或Collectors.summingDouble
方法来对分组后的数据进行求和操作。
下面是一个示例代码,演示如何对一个包含多个对象的数据流按照某个属性进行分组,并对每个分组进行求和操作:
importjava.util.Arrays;
importjava.util.List;
importjava.util.Map;
importjava.util.stream.Collectors;
classItem{
Stringcategory;
intamount;
publicItem(Stringcategory,intamount){
this.category=category;
this.amount=amount;
}
publicStringgetCategory(){
returncategory;
}
publicintgetAmount(){
returnamount;
}
}
publicclassMain{
publicstaticvoidmain(String[]args){
List<Item>items=Arrays.asList(
newItem("A",10),
newItem("B",20),
newItem("A",30),
newItem("B",40),
newItem("A",50)
);
//按照category分组,并对每个分组的amount求和
Map<String,Integer>sumByCategory=items.stream()
.collect(Collectors.groupingBy(Item::getCategory,Collectors.summingInt(Item::getAmount)));
System.out.println(sumByCategory);
}
}
以上代码将输出一个包含不同category的总和的Map:
{A=90,B=60}