Kotlin使用lambda求和对象中的值



我有一张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.mapValuesCollections.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!!}

这应该行得通。

最新更新