Kotlin如何使用lambda对Map中VehicleData对象的totalKwh属性求和
Kotlin 函数式风格实现分组求和方案
直接使用Kotlin标准库提供的集合高阶函数即可实现,完全不需要手动维护可变集合和临时累加变量:
最简实现(仅返回总和列表,和原逻辑输出一致)
val sumList = vehicleDataMap.values .map { vehicleList -> vehicleList.sumOf { it.totalKwh ?: 0.0 } }
代码说明:
- 调用
values直接获取Map中所有的List<VehicleData>集合,无需处理无关的Key - 外层
map函数将每个车辆列表转换为对应总和值,最终返回只读的List<Double>,无副作用符合函数式规范 - 内层
sumOf是Kotlin 1.4+内置的求和函数,自动完成字段累加逻辑,这里用?: 0.0处理totalKwh为空的边界情况,避免原代码中!!可能触发的空指针异常,如果你业务上确保该字段不会为空,可以直接替换为it.totalKwh!!
保留Key对应关系的实现
如果你需要同时保留分组Key和对应总和,可使用mapValues函数:
val kwhSumMap = vehicleDataMap.mapValues { (_, vehicleList) -> vehicleList.sumOf { it.totalKwh ?: 0.0 } }
该代码返回Map<String, Double>类型,Key为你原分组的kwh标识,Value为对应分组的总kwh值。
低版本Kotlin兼容实现
如果你使用的Kotlin版本低于1.4,没有sumOf函数,可替换为sumByDouble:
val sumList = vehicleDataMap.values .map { vehicleList -> vehicleList.sumByDouble { it.totalKwh ?: 0.0 } }
内容的提问来源于stack exchange,提问作者hades
相关产品推荐
相关产品推荐

