如何在kotlin中使用map filter和reduce函数计算平均值

how to calculate the average value with map filter and reduce functions in kotlin

我想使用 kotlin 中的 map、filter 和 reduce 函数计算集合中某个值的平均值。

我是这样保存数据的:

data class  Track(
val id:String,
var name: String,
var popularity: Int,
var duration: Int,
var explicit: Int,
var artist: String,
var idArtist: String,
var releaseDate: String,
var danceability: Float,
var energy: Float,
var key: Float,
var loudness: Float,
var mode: Float,
var speechness: Float,
var acousticness: Float,
var instrumentalness: Float,
var liveness: Float,
var valence: Float,
var tempo: Float,
var timeSignature: Float

)

我按年份对数据进行了分组:

fun group_tracks_by_year(tracks: MutableList<Track>): Map<String, List<Track>> {

    val grouped_tracks = tracks.groupBy { it.releaseDate.split('-')[0] }.toSortedMap()
    return  grouped_tracks
}

例如,我想计算每年的平均节奏,我正在尝试使用 map function 操作地图集 Map<String, List<Track>>,但我无法操作键-值记录。

您不需要 filterreduce。您可以使用 sumOf.

并且您应该使用 mapValues,因为 map returns 具有相同键的列表而不是映射。

val tempoAveragesByYear = tracksByYear.mapValues { (year, tracks) -> 
    (tracks.sumOf { it.tempo.toDouble() } / tracks.size ).toFloat()
}