Kotlin:如何将列表转换为带列表的地图?

Ely*_*lye 13 kotlin

我有一个列表如下{("a",1),("b",2),("c",3),("a",4)}

我想将它转换为列表地图,如下所示{("a"(1,4)),("b",(2)),("c",(3)))}

即对于a,我们有一个1和4的列表,因为键是相同的.

在回答 如何列出科特林到地图转换?只显示唯一值(而不是像我一样的重复值).

associateBy在Kotlin 试过

    data class Combine(val alpha: String, val num: Int)
    val list = arrayListOf(Combine("a", 1), Combine("b", 2), Combine("c", 3), Combine("a", 4))
    val mapOfList = list.associateBy ( {it.alpha}, {it.num} )
    println(mapOfList)
Run Code Online (Sandbox Code Playgroud)

但似乎没有用.我怎么能在Kotlin做到这一点?

jrt*_*ell 14

fun main(args: Array<String>) {
    data class Combine(val alpha: String, val num: Int)
    val list = arrayListOf(Combine("a", 1), Combine("b", 2), Combine("c", 3), Combine("a", 4))
    val mapOfList = list.associateBy ( {it.alpha}, {it.num} )
    println(mapOfList)
    val changed = list
        .groupBy ({ it.alpha }, {it.num})
    println(changed)
}
Run Code Online (Sandbox Code Playgroud)

产量

{a=4, b=2, c=3}
{a=[1, 4], b=[2], c=[3]}
Run Code Online (Sandbox Code Playgroud)

这个怎么运作

  • 首先它需要列表
  • 它将Combines的α值分组为它们的num

  • 请注意,有两个选择器的“groupBy”重载:键和值,因此您不必最后调用“mapValue”:“groupBy({ it.apha }, { it.num })” (3认同)

Jac*_*hoi 8

您可以先按列表对列表进行分组alpha,然后将值映射到List<Int>

data class Combine(val alpha: String, val num: Int)
val list = arrayListOf(Combine("a", 1), Combine("b", 2), Combine("c", 3), Combine("a", 4))
val mapOfList = list
        .groupBy { it.alpha }
        .mapValues { it.value.map { it.num } }
println(mapOfList)
Run Code Online (Sandbox Code Playgroud)