有一个java实体列表 实体中包含两个个字段String类型的id Double类型的num 共有4条数据 id为小明的 num 为2 另一条num为4 id为小红的 num 为3 另一个num为6要求用Stream流统计小明与小红的num和 并返回 map key为id value为计算后的和
可以这样实现:
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
List<Entity> list = new ArrayList<>();
list.add(new Entity("小明", 2.0));
list.add(new Entity("小明", 4.0));
list.add(new Entity("小红", 3.0));
list.add(new Entity("小红", 6.0));
Map<String, Double> result = list.stream()
.collect(Collectors.groupingBy(Entity::getId, Collectors.summingDouble(Entity::getNum)));
System.out.println(result);
}
}
class Entity {
private String id;
private Double num;
public Entity(String id, Double num) {
this.id = id;
this.num = num;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Double getNum() {
return num;
}
public void setNum(Double num) {
this.num = num;
}
}
输出结果为:
{小红=9.0, 小明=6.0}
解释一下,首先我们将实体列表转成流,然后使用Collectors.groupingBy方法按照Entity对象的id字段进行分组,再使用Collectors.summingDouble方法对每个分组的Entity对象的num字段求和,最终得到一个Map对象,其中key为id,value为该id对应的num字段的和
原文地址: http://www.cveoy.top/t/topic/g1u0 著作权归作者所有。请勿转载和采集!