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

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

















