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