collectors.averagingint 是 java stream 中计算整型属性平均值的收集器,返回 double 类型结果;空流时返回 0.0,不处理 null 属性,底层用 long 累加防溢出。

Collectors.averagingInt 是 Java Stream API 中用于计算整型属性平均值的收集器,它会自动处理空集合、类型转换和精度问题,返回 double 类型结果。
基本用法:传入 Function 提取整型属性
你需要提供一个 Function<t integer></t>(通常用方法引用或 Lambda),从每个元素中提取 int 值。averagingInt 会对这些值求算术平均数(总和 ÷ 元素个数)。
- 如果流为空,结果为
0.0(不是NaN或异常) - 即使所有值都是 int,结果仍是
double,支持小数位(如 3.5) - 底层会将 int 自动装箱为 Integer,再调用其
intValue(),所以 null 属性会抛NullPointerException
常见写法示例
假设有一个学生类:
计算平均分:
Listdouble avg = students.stream().collect(Collectors.averagingInt(Student::score)); // 结果 85.0
注意 null 和边界情况
averagingInt 不处理 null 属性值:
- 若
Student::score是 null 安全的(比如 score 是 Integer 类型),需先过滤或映射:.map(s -> s.getScore() != null ? s.getScore() : 0) - 若想跳过 null 值,可提前
filter(Objects::nonNull)或用mapToInt+average()配合OptionalDouble - 整数溢出不会在 averagingInt 中检测(内部用 long 累加,一般够用;极端大数据量建议用
averagingLong)
对比其他平均方式
如果需要更精细控制(如忽略负分、自定义精度、处理空结果),可改用:
-
mapToInt(Student::score).average().orElse(0.0)—— 返回OptionalDouble,空流时可指定默认值 -
collect(Collectors.summarizingInt(Student::score))—— 一次性获取 count/sum/min/max/average - 自定义收集器或分组后平均(如按班级分组求各班平均分)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











