IntSummaryStatistics是Java中用于int类型数据聚合统计的工具类,配合Stream可一行获取最大值、最小值、平均值、总和及计数;空流时getMax()返回Integer.MIN_VALUE、getMin()返回Integer.MAX_VALUE、getAverage()返回0.0,需用getCount()==0校验;手动遍历则更轻量可控。

Java 中的 IntSummaryStatistics 是专门用于对 int 类型数据做聚合统计的工具类,配合 Stream API 可以一行代码完成最大值、最小值、平均值和总和的计算。
使用 Stream + IntSummaryStatistics 统计数组
核心思路是将整数数组转为 IntStream,再通过 summaryStatistics() 收集结果。统计完成后,直接调用对应方法获取所需值:
-
getMax()获取最大值(注意:若流为空,返回Integer.MIN_VALUE) -
getMin()获取最小值(空流时返回Integer.MAX_VALUE) -
getAverage()返回double类型平均值(空流时为0.0) -
getSum()和getCount()也一并可用
示例代码:
int[] numbers = {3, 7, 1, 9, 4};
IntSummaryStatistics stats = Arrays.stream(numbers).summaryStatistics();
System.out.println("最大值:" + stats.getMax()); // 9
System.out.println("最小值:" + stats.getMin()); // 1
System.out.println("平均值:" + stats.getAverage()); // 4.8
处理空数组需注意边界情况
当输入数组为空时,getMax() 和 getMin() 的返回值不具备业务意义(分别是 Integer.MIN_VALUE 和 Integer.MAX_VALUE),容易引发逻辑错误。建议提前校验:
- 用
stats.getCount() == 0判断是否为空统计 - 根据业务需要抛异常、返回 Optional 或默认值
替代方案:不依赖 Stream 的轻量方式
如果只是简单统计且不想引入 Stream 开销(如高频调用或嵌入式场景),可手动遍历一次完成所有计算,时间复杂度仍是 O(n),且避免了空流陷阱:
if (numbers.length == 0) {
throw new IllegalArgumentException("数组不能为空");
}
int min = numbers[0], max = numbers[0], sum = 0;
for (int n : numbers) {
min = Math.min(min, n);
max = Math.max(max, n);
sum += n;
}
double avg = (double) sum / numbers.length;
IntSummaryStatistics 适合函数式风格、配合集合或流式处理的场景;手动遍历更适合对性能或控制力要求更高的场合。选哪种,取决于你的上下文和需求重点。

















