You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中自定义类对象列表去重并合并指定属性值的实现

按员工ID去重并合并薪酬的实现方案

我定义了如下Employee类:

class Employee {

    private final String id;
    private float compensation;

    public Employee(String id, float compensation) {
        this.id = id;
        this.compensation = compensation;
    }

    public String getId() {
        return id;
    }
    
    public float getCompensation() {
        return compensation;
    }
}

同时拥有一个员工对象列表:

List<Employee> payment = Arrays.asList(
      new Employee("1", 3000.00f),
      new Employee("1", 6000.00f),
      new Employee("2", 5000.00f),
      new Employee("3", 4000.00f),
);

需要对该列表按员工ID去重,并合并对应compensation属性的值,预期结果如下:

List<Employee> newPayment = Arrays.asList(
      new Employee("1", 9000.00f),
      new Employee("2", 5000.00f),
      new Employee("3", 4000.00f),
);

方法一:使用Java 8 Stream API(推荐)

利用流式API的分组和汇总能力,实现简洁高效的处理:

List<Employee> newPayment = payment.stream()
        // 按员工ID分组,键为ID,值为对应员工对象集合
        .collect(Collectors.groupingBy(Employee::getId))
        .entrySet()
        .stream()
        // 对每组员工的薪酬求和,创建新的Employee实例
        .map(entry -> new Employee(
                entry.getKey(),
                entry.getValue().stream()
                        .mapToFloat(Employee::getCompensation)
                        .sum()))
        .collect(Collectors.toList());

方法二:传统循环遍历方式

适用于不支持Java 8+的项目,通过HashMap实现分组累加:

// 先按ID分组累加薪酬
Map<String, Float> idCompSumMap = new HashMap<>();
for (Employee emp : payment) {
    String empId = emp.getId();
    // 已存在则累加,不存在则初始化
    idCompSumMap.put(empId, 
            idCompSumMap.getOrDefault(empId, 0.0f) + emp.getCompensation());
}

// 将Map转换为目标Employee列表
List<Employee> newPayment = new ArrayList<>();
for (Map.Entry<String, Float> entry : idCompSumMap.entrySet()) {
    newPayment.add(new Employee(entry.getKey(), entry.getValue()));
}

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:13:16