如何使用 IntSummaryStatistics 快速计算整数数组的最大值、最小值和平均值?

2026-04-30 16:451阅读0评论SEO基础
  • 内容介绍
  • 相关推荐

本文共计574个文字,预计阅读时间需要3分钟。

如何使用 IntSummaryStatistics 快速计算整数数组的最大值、最小值和平均值?

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_VALUEInteger.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 适合函数式风格、配合集合或流式处理的场景;手动遍历更适合对性能或控制力要求更高的场合。选哪种,取决于你的上下文和需求重点。

本文共计574个文字,预计阅读时间需要3分钟。

如何使用 IntSummaryStatistics 快速计算整数数组的最大值、最小值和平均值?

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_VALUEInteger.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 适合函数式风格、配合集合或流式处理的场景;手动遍历更适合对性能或控制力要求更高的场合。选哪种,取决于你的上下文和需求重点。