java中lambda表达式需配合stream api实现集合数值计算:1.基础求和用maptoint().sum();2.多类型聚合用intstream等原始流的average()/max()/min()/count();3.分组聚合用groupingby嵌套summingint/averagingint;4.灵活归约用reduce自定义逻辑。

Java 中 Lambda 表达式本身不直接做计算,而是配合 Stream API 完成集合元素的各类数值计算,比如求和、平均值、最大最小值、分组汇总等。核心在于把集合转为流(stream()),再用函数式操作链完成处理。
基础求和:整数或对象属性求和
对 List<integer></integer> 或对象中某个数值字段求和,最常用的是 mapToInt().sum():
-
list.stream().mapToInt(Integer::intValue).sum()—— 直接求整数列表总和 -
users.stream().mapToInt(User::getScore).sum()—— 对 User 对象的 score 字段求和 - 注意:
mapToInt返回的是IntStream,才能调用sum();若用map会返回Stream,无法直接 sum
多类型聚合:平均值、最值、计数
这些操作都基于对应的原始类型流(IntStream / LongStream / DoubleStream):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 平均值:
list.stream().mapToInt(x -> x).average().orElse(0.0)(返回 OptionalDouble) - 最大值:
list.stream().mapToInt(x -> x).max().orElse(-1) - 最小值:
list.stream().mapToInt(x -> x).min().orElse(-1) - 元素个数:
list.stream().count()(无需 map,直接统计)
分组后聚合:按字段分类再算总和/均值
先用 groupingBy 分组,再嵌套聚合操作:
- 按姓名分组并求每组分数总和:
users.stream().collect(Collectors.groupingBy(User::getName, Collectors.summingInt(User::getScore))) - 按年龄分组并求每组平均分:
users.stream().collect(Collectors.groupingBy(User::getAge, Collectors.averagingInt(User::getScore))) - 结果是
Map<k number></k>,例如Map<string integer></string>或Map<integer double></integer>
灵活归约:自定义计算逻辑
当内置方法不够用时,可用 reduce 实现任意二元运算:
- 简单累加:
list.stream().reduce(0, (a, b) -> a + b)或简写为list.stream().reduce(0, Integer::sum) - 空集合安全处理:
reduce返回Optional,推荐用带初始值的三参数版本避免判空 - 对象字段归约:
users.stream().reduce(0, (sum, u) -> sum + u.getScore(), Integer::sum)
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










