我有一张Map<String, List<VehicleData>>
的地图
data class VehicleData{
var id: Long? = null,
var totalKwh: Double? = null,
}
I通过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)
}
我如何以函数方式进行求和?类似于kotlin lambda
您可以使用Map.mapValues
和Collections.sumOf
(或Kotlin 1.4之前的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 }
}
it.value.sumOf {it.totalKwh!!}
这应该行得通。