IntSummaryStatistics 是 Java 8 提供的 int 流统计工具,一键获取 count、sum、min、max、average 五项指标;空流时 min 为 Integer.MAX_VALUE、max 为 Integer.MIN_VALUE、average 为 0.0,需判空避免误用。

IntSummaryStatistics 是 Java 8 引入的用于对 int 类型数据流进行汇总统计的工具类,属于 java.util.stream 包,常配合 Stream 和 Collectors.summarizingInt() 使用。
核心作用:一键获取整数集合的常用统计值
它自动计算并封装以下 5 项基础统计信息:
- count:元素个数
- sum:所有值的总和
-
min:最小值(若流为空,返回
Integer.MAX_VALUE) -
max:最大值(若流为空,返回
Integer.MIN_VALUE) -
average:平均值(
double类型,空流时为0.0)
典型用法:配合 Stream.collect()
最常见方式是通过 Collectors.summarizingInt() 收集:
int[] numbers = {1, 3, 5, 7, 9};
IntSummaryStatistics stats = Arrays.stream(numbers)
.collect(Collectors.summarizingInt(x -> x));
System.out.println("count: " + stats.getCount()); // 5
System.out.println("sum: " + stats.getSum()); // 25
System.out.println("min: " + stats.getMin()); // 1
System.out.println("max: " + stats.getMax()); // 9
System.out.println("average: " + stats.getAverage()); // 5.0
注意空流的边界行为
当输入流为空时,IntSummaryStatistics 仍会返回一个有效对象,但部分字段有默认值:
-
getCount()返回0 -
getMin()返回Integer.MAX_VALUE(不是Optional) -
getMax()返回Integer.MIN_VALUE -
getAverage()返回0.0
因此使用 getMin() 或 getMax() 前建议先判断 getCount() > 0,避免误用默认极值。
与手动计算或第三方库的对比
相比手写循环或引入 Apache Commons Math:
- 语法简洁,一行 collect 完成全部统计
- 线程安全,适合并行流(
parallelStream()) - 不依赖外部库,JDK 原生支持
- 仅适用于
int,如需long或double,对应有LongSummaryStatistics和DoubleSummaryStatistics

















