summarizingint 是 java stream api 中用于对 int 流生成统计摘要的收集器,返回 intsummarystatistics 对象,提供 getcount、getsum、getaverage、getmin、getmax 等方法,支持一次遍历获取全部统计值,适用于数据探索与报表生成。

summarizingInt 是 Java Stream API 中一个非常实用的收集器(Collector),专门用于对 int 类型的数值流快速生成统计摘要,比如计数、总和、平均值、最小值、最大值。它返回一个 IntSummaryStatistics 对象,封装了全部基础统计信息,避免手动遍历多次或分别调用多个终端操作。
使用 summarizingInt 获取完整统计结果
只需将一个 ToIntFunction(即从元素映射为 int 的函数)传给 Collectors.summarizingInt(),就能一次性获取所有统计值:
- 调用
stream.collect(Collectors.summarizingInt(...)) - 传入的 lambda 或方法引用必须返回
int,例如Person::getAge或p -> p.score - 返回的
IntSummaryStatistics提供getCount()、getSum()、getAverage()、getMin()、getMax()等方法
典型使用示例
假设有一个学生列表,想快速了解成绩分布:
List<student> students = Arrays.asList(
new Student("Alice", 85),
new Student("Bob", 92),
new Student("Charlie", 78)
);
IntSummaryStatistics stats = students.stream()
.collect(Collectors.summarizingInt(Student::getScore));
System.out.println("总数:" + stats.getCount()); // 3
System.out.println("总分:" + stats.getSum()); // 255
System.out.println("平均分:" + stats.getAverage()); // 85.0
System.out.println("最高分:" + stats.getMax()); // 92
System.out.println("最低分:" + stats.getMin()); // 78
</student>
注意事项与常见误区
这个收集器只适用于 int 值,不支持 long 或 double —— 后者需分别用 summarizingLong 和 summarizingDouble;如果流为空,getMin() 和 getMax() 返回 Integer.MAX_VALUE 和 Integer.MIN_VALUE,getAverage() 返回 0.0,使用前建议检查 getCount() == 0;它内部只遍历一次流,性能高效,比多次调用 mapToInt().sum()、.max() 等更优。
配合 filter 或 map 进行条件统计
可以先筛选再统计,比如只统计及格(≥60)学生的分数摘要:
students.stream().filter(s -> s.getScore() >= 60).collect(Collectors.summarizingInt(Student::getScore))- 也可以先转换字段,例如统计名字长度的统计摘要:
stream.mapToInt(String::length).summaryStatistics()(注意这里直接用mapToInt后调summaryStatistics()更简洁)
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











