Java Stream 流统计实体列表中特定字段的和
使用 Java Stream 流统计实体列表中特定字段的和
本文将介绍如何使用 Java Stream 流对包含多个实体的列表进行统计,并根据特定字段分组求和。以统计实体列表中 '小明' 和 '小红' 的 'num' 字段和为例,展示如何利用 Collectors.groupingBy 和 Collectors.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;
}
}
代码解释:
- 首先我们将实体列表转换为流,使用
list.stream()方法。 - 然后使用
Collectors.groupingBy方法按照Entity对象的id字段进行分组。 - 再使用
Collectors.summingDouble方法对每个分组的Entity对象的num字段求和。 - 最终得到一个
Map对象,其中key为id,value为该id对应的num字段的和。
输出结果
{小红=9.0, 小明=6.0}
总结
本文展示了如何使用 Java Stream 流对包含多个实体的列表进行统计,并根据特定字段分组求和。通过 Collectors.groupingBy 和 Collectors.summingDouble 方法可以方便地实现该功能。
希望本文对您有所帮助。
原文地址: https://www.cveoy.top/t/topic/ozTO 著作权归作者所有。请勿转载和采集!