跳转到主内容
极星编程网:以代码为星,赴技术山海!

如何在 Java 中利用 Collectors.averagingInt() 在流式处理过程中快速算出所有成员的数值均值

Collectors.averagingInt()可一步计算int字段平均值并返回double,需确保映射函数不返回null、处理空流返回的Double.NaN,并严格使用ToIntFunction参数。 直接用
Collectors.averagingInt()
就能一步算出整型字段的平均值,它专为
int
类型设计,内部自动处理求和与计数,返回
double
类型结果,避免手动写归约逻辑。 确保流中元素非空且字段可提取 该收集器不会跳过
null
元素——如果映射函数(如方法引用)对某个对象返回
null
,运行时会抛
NullPointerException
。务必提前过滤或保证数据安全: 用
filter(Objects::nonNull)
剔除空对象 若字段本身可能为
null
(如包装类
Integer
),改用
averagingDouble
配合
mapToInt(x -> x.getValue() != null ? x.getValue() : 0)
等兜底逻辑 原始类型字段(如
int age
)天然安全,无需额外判空 正确传入 IntFunction 映射逻辑 参数必须是
ToIntFunction
,即从元素中提取一个
int
值的函数。常见写法包括: 方法引用:
Person::getAge
(假设
getAge()
返回
int
) Lambda 表达式:
p -> p.score * 10
(支持简单计算) 注意不能传
Function
(返回包装类),否则编译不通过 空流时返回 Double.NaN,需主动处理 若流中没有元素,结果为
Double.NaN
,而非 0 或异常。生产环境应检查: Eclipse导入Android或其他的JAVA项目的正确方法 WORD版 本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看 下载 立即学习 “ Java免费学习笔记(深入) ”; 用
Double.isNaN(result)
判断是否为空流 根据业务决定返回默认值(如 0.0)、抛自定义异常,或记录告警 例如:
double avg = list.stream().collect(averagingInt(Person::getAge)); return Double.isNaN(avg) ? 0.0 : avg;
不复杂但容易忽略细节:类型匹配、空值防护、NaN 处理这三点到位,
averagingInt
就是又快又稳的均值工具。

相关文章