Kotlin列表EnumMap与总和

我必须把我的项目迁移到Kotlin。 后来我质疑这个问题 。 而且我真的不知道如何在Kotlin中实现它。 我知道’associateBy’函数,但它没有Java 8’groupBy’所具有的那么多的参数。 这是一种使用lambdas实现它的方法吗? 如果没有,我怎么能没有它实现这个算法?

目前,最简单的解决方案是首先使用.groupBy { }生成分组,然后使用.mapValuesTo() { }处理组,然后将它们转换为和:

 val result = marks .groupBy(Mark::subject) .mapValuesTo(EnumMap(Subject::class.java)) { it.value.sumBy(Mark::value) } 

在Kotlin 1.1发布之后, Kotlin 1.1 Beta中显示的新stdlibfunction将允许您在没有中间组映射的情况下执行相同的function。 相反,这个集合只能用这个代码处理一次:

 val result = marks .groupingBy(Mark::subject) .foldTo(EnumMap(Subject::class.java), 0) { acc, it -> acc + it.value }