Kotlin列出了EnumMap的总和

时间:2017-01-27 22:44:42

标签: kotlin

我必须将我的项目迁移到Kotlin。后来,我质疑this issue。我真的无法在Kotlin中实现它。我知道'associateBy'函数,但它没有Java 8'groupBy'具有的那么多参数。它是用lambdas实现它的一种方法。如果没有,我怎么能在没有它的情况下实现这个算法?

1 个答案:

答案 0 :(得分:4)

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

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

在Kotlin 1.1发布后,新的stdlib功能shown in Kotlin 1.1 Beta将允许您在没有中间组映射的情况下执行相同操作。而是使用以下代码处理集合:

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