You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:45:05