java中lambda表达式需配合stream api和collectors完成统计,支持计数、求和、平均值、最值、分组计数、多项汇总及条件聚合,代码简洁高效。

基础统计:计数、求和、平均值、最值
适用于简单数值集合或对象字段提取后的聚合:
-
计数:用
count()统计元素个数,比如list.stream().filter(x -> x > 10).count() -
求和:先用
mapToInt或mapToDouble转成原始流,再调sum(),如list.stream().mapToInt(User::getAge).sum() -
平均值:同样需先转原始流,
average()返回OptionalDouble,建议用orElse(0)防空指针 -
最值:用
max()/min(),返回OptionalInt等,推荐搭配ifPresent或orElse安全取值
按字段分组统计数量
用 Collectors.groupingBy + Collectors.counting() 实现常见分组计数:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 单字段分组:如按用户年龄统计人数 →
users.stream().collect(groupingBy(User::getAge, counting())) - 多字段嵌套分组:如先按城市、再按年龄段统计 →
groupingBy(Person::getCity, groupingBy(Person::getAge, counting())) - 注意返回类型是
Map<k long></k>或嵌套Map,遍历时可用forEach直接输出
一次性获取多项统计结果
避免多次遍历,用 summarizingInt/Long/Double 一步拿到均值、总和、最大最小值、数量:
- 例如:
IntSummaryStatistics stats = list.stream().collect(summarizingInt(User::getSalary)) - 之后可直接调用
stats.getAverage()、stats.getMax()、stats.getCount()等 - 适合报表类场景,性能好、代码少
带条件的统计与聚合
结合 filter、map 等中间操作灵活定制统计逻辑:
- 统计满足条件的元素个数:如
list.stream().filter(u -> u.isActive()).count() - 统计某字段满足条件的总和:如
list.stream().filter(u -> u.getScore() > 60).mapToInt(User::getScore).sum() - 自定义聚合:用
collect(Supplier, BiConsumer, BiConsumer)或reducing实现复杂逻辑(如加权平均)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










