collectors.summarizingint返回intsummarystatistics对象,封装计数、最小值、最大值、总和与平均值五项统计信息,需配合stream.collect()使用,支持空流处理但不检测整数溢出。

<p>使用 <code>Collectors.summarizingInt</code> 会返回一个 <code>IntSummaryStatistics</code> 对象,它封装了计数、最小值、最大值、总和与平均值这五项统计信息。</p> <h3>调用 collect 方法获取摘要对象</h3> <p>必须配合 <code>Stream.collect()</code> 使用,传入 <code>summarizingInt</code> 作为收集器:</p>
- 参数是一个
ToIntFunction,用于从每个元素提取 int 值(如Person::getAge) - 结果是立即计算出的
IntSummaryStatistics实例,不是延迟求值 - 如果流为空,返回的摘要对象中
count == 0,其余字段(min/max/sum/average)按默认值处理(min=最大值,max=最小值,sum=0,average=0.0)
常用获取方式示例
以整数列表为例:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
<code>List<Integer> numbers = Arrays.asList(1, 3, 5, 7, 9);
IntSummaryStatistics stats = numbers.stream()
.collect(Collectors.summarizingInt(Integer::intValue));
</code>
对对象集合也一样,比如统计用户年龄:
<code>List<User> users = ...;
IntSummaryStatistics ageStats = users.stream()
.collect(Collectors.summarizingInt(User::getAge));
</code>
从摘要对象中提取具体统计值
IntSummaryStatistics 提供了直接可用的 getter 方法:
-
stats.getCount()→ 返回元素个数 -
stats.getMin()→ 最小值(若为空则为Integer.MAX_VALUE) -
stats.getMax()→ 最大值(若为空则为Integer.MIN_VALUE) -
stats.getSum()→ 所有值之和(空时为 0) -
stats.getAverage()→ 平均值(double 类型,空时为 0.0)
注意空流和数值溢出
该收集器不检测整数溢出 —— 若 sum 超出 int 范围,结果会静默溢出。如需安全求和,应改用 summarizingLong 或手动用 mapToLong 配合 sum;对空流,建议先判断 getCount() > 0 再使用 getMin()/getMax(),避免误用边界默认值。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










