Kotlin 使用 lambda 求和对象中的值

Kotlin sum values in object using lambda

我有一张Map<String, List<VehicleData>>

的地图
data class VehicleData{
  var id: Long? = null, 
  var totalKwh: Double? = null,
}

我按 kwh

对数据进行分组
"kwh" to List<VehicleData>

我需要总结一下中的totalKwh,我目前的做法是

//assume that i set the data into vehicleDataMap, vehicleDataMap has format of Map<String, List<VehicleData>>
//how can i do the following in functional way in kotlin?
var list = mutableListOf<Number>()
vehicleDataMap.forEach{
    var sumKwh = 0.0
    it.value.forEach{
        sumKwh = sumKwh.plus(it.totalKwh!!)
    }
    list.add(sumKwh)
}

我如何以函数式方式计算 SUM?就像在科特林 lambda

it.value.sumOf {it.totalKwh!!}

这应该有效。

您可以在 Kotlin 1.4 之前使用 Map.mapValuesCollections.sumOf (or sumByDouble):

val res: Map<String, Double> = vehicleDataMap.mapValues {
    (_, v) -> v.sumOf { it.totalKwh ?: 0.0 }
}

或者,如果您需要 List 作为结果:

val res: List<Double> = vehicleDataMap.values.map {
    it.sumOf { it.totalKwh ?: 0.0 }
}