可以这样实现:

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对象,其中keyidvalue为该id对应的num字段的和

有一个java实体列表 实体中包含两个个字段String类型的id Double类型的num 共有4条数据 id为小明的 num 为2 另一条num为4 id为小红的 num 为3 另一个num为6要求用Stream流统计小明与小红的num和 并返回 map key为id value为计算后的和

原文地址: http://www.cveoy.top/t/topic/g1u0 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录