使用 Java Stream 流统计实体列表中特定字段的和

本文将介绍如何使用 Java Stream 流对包含多个实体的列表进行统计,并根据特定字段分组求和。以统计实体列表中 '小明' 和 '小红' 的 'num' 字段和为例,展示如何利用 Collectors.groupingByCollectors.summingDouble 方法实现。

问题描述

假设有一个实体列表,每个实体包含两个字段:

  • id:字符串类型,表示实体的标识。
  • num:双精度类型,表示实体的数值。

现在需要统计列表中所有 '小明' 和 '小红' 的 num 字段和。

实现方案

可以使用 Java Stream 流来实现该功能,代码如下:

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;
    }
}

代码解释:

  1. 首先我们将实体列表转换为流,使用 list.stream() 方法。
  2. 然后使用 Collectors.groupingBy 方法按照 Entity 对象的 id 字段进行分组。
  3. 再使用 Collectors.summingDouble 方法对每个分组的 Entity 对象的 num 字段求和。
  4. 最终得到一个 Map 对象,其中 keyidvalue 为该 id 对应的 num 字段的和。

输出结果

{小红=9.0, 小明=6.0}

总结

本文展示了如何使用 Java Stream 流对包含多个实体的列表进行统计,并根据特定字段分组求和。通过 Collectors.groupingByCollectors.summingDouble 方法可以方便地实现该功能。

希望本文对您有所帮助。

Java Stream 流统计实体列表中特定字段的和

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

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