java中arrays.stream()不直接提供一键统计最大值与平均值的方法,但可通过intstream的summarystatistics()单次遍历获取max和average等统计值,空数组时getmax()返回integer.min_value、getaverage()返回0.0,需按业务需求校验处理。

Java 中 Arrays.stream() 本身不直接提供“一键统计最大值与平均值”的聚合方法,但可以通过流式操作链式调用 max() 和 average() 实现——注意:它们返回的是 Optional 类型,需妥善处理空数组场景。
用 stream() 分别获取最大值和平均值
对基本类型数组(如 int[]),Arrays.stream(arr) 返回的是 IntStream,可直接调用 max() 和 average():
-
max()返回OptionalInt,调用orElse(0)或orElseThrow()处理空数组 -
average()返回OptionalDouble,同样需判空;若为空,结果为NaN,建议显式处理 - 两次独立调用不会重复遍历数组(因为
IntStream是惰性求值,但底层仍会遍历两次)
避免重复遍历:用 summaryStatistics() 一次获取多个统计值
更高效的方式是使用 summaryStatistics(),它在单次遍历中收集计数、总和、最小值、最大值、平均值:
-
IntStream.of(arr).summaryStatistics()返回IntSummaryStatistics - 调用
getMax()和getAverage()即可拿到所需结果 - 该对象还提供
getMin()、getSum()、getCount(),适合多指标统计场景
处理空数组的健壮写法
空数组会导致 max() 和 average() 返回空 Optional,必须预防 NoSuchElementException:
- 用
isPresent()判断再取值,或统一用orElse(...)设默认值(如最大值设Integer.MIN_VALUE,平均值设0.0) - 使用
summaryStatistics()时,空流返回的getMax()是Integer.MIN_VALUE,getAverage()是0.0—— 这个行为需留意,不是异常,但语义上可能不符合预期 - 若业务要求空数组抛异常或返回特定提示,建议先校验
arr.length == 0
完整示例代码
以下是一个安全、简洁的封装方式:
int[] arr = {1, 5, 3, 9, 2};
if (arr.length == 0) {
System.out.println("数组为空");
} else {
IntSummaryStatistics stats = Arrays.stream(arr).summaryStatistics();
int max = stats.getMax();
double avg = stats.getAverage();
System.out.printf("最大值:%d,平均值:%.2f%n", max, avg);
}











