Collectors.summarizingLong用于提取流中元素的long值并生成包含计数、总和、最值和平均值的LongSummaryStatistics对象,适用于需一次性获取多项统计指标的场景。

在Java中,Collectors.summarizingLong 是 java.util.stream.Collectors 类提供的一个归约操作方法,用于对流中的元素提取 long 值并生成一个 LongSummaryStatistics 对象。这个对象包含了统计信息:计数(count)、总和(sum)、最小值(min)、最大值(max)和平均值(average)。
1. 方法基本语法
该方法的定义如下:public static
参数说明:
-
mapper:是一个函数式接口
ToLongFunction,用于从流中的每个元素提取一个long值。
2. 返回结果:LongSummaryStatistics
调用summarizingLong 后会返回一个 LongSummaryStatistics 实例,它提供以下方法获取统计值:
- getCount():元素数量
- getSum():所有值的总和
- getMin():最小值(若无元素,默认为 Long.MAX_VALUE)
- getMax():最大值(若无元素,默认为 Long.MIN_VALUE)
- getAverage():平均值(若无元素,默认为 0.0)
3. 使用示例
假设有一个用户列表,每个用户有年龄字段(用 long 表示),我们想统计这些用户的年龄汇总信息:
import java.util.*;
import java.util.stream.Collectors;
class User {
private String name;
private long age;
public User(String name, long age) {
this.name = name;
this.age = age;
}
public long getAge() {
return age;
}
// getter 和 setter 省略
}
public class Main {
public static void main(String[] args) {
List users = Arrays.asList(
new User("Alice", 30),
new User("Bob", 25),
new User("Charlie", 35),
new User("Diana", 28)
);
LongSummaryStatistics stats = users.stream()
.collect(Collectors.summarizingLong(User::getAge));
System.out.println("总人数: " + stats.getCount());
System.out.println("总年龄: " + stats.getSum());
System.out.println("最小年龄: " + stats.getMin());
System.out.println("最大年龄: " + stats.getMax());
System.out.println("平均年龄: " + stats.getAverage());
}
}
输出结果:
总人数: 4
总年龄: 118
最小年龄: 25
最大年龄: 35
平均年龄: 29.5
4. 注意事项与适用场景
- 适用于需要一次性获取多个统计指标的场景,避免多次遍历流。
- 输入流为空时,
count为 0,sum为 0,min为Long.MAX_VALUE,max为Long.MIN_VALUE,average为 0.0 —— 使用时注意判断是否为空。 - 性能优于分别使用
sum()、max()等单独计算多次。









