代码之家  ›  专栏  ›  技术社区  ›  Eldar Agalarov

Kotlin:将一个列表组合成一张地图

  •  0
  • Eldar Agalarov  · 技术社区  · 6 年前

    如何使用lambdas将列表分组到地图中?强制性解决方案如下:

    private class Data(val a: Int, val b: Int, val c: Int)
    
    @JvmStatic
    fun main(args: Array<String>) {
        val dataList = listOf(Data(1, 2, 3), Data(4, 5, 6), Data(7, 8, 9), Data(1, 10, 11))
        val result = mutableMapOf<Int, MutableMap<Int, Int>>()
        for (data in dataList) {
            val aMap = result.getOrPut(data.a) { mutableMapOf() }
            aMap[data.b] = data.c
        }
        println(result)
    }
    
    1 回复  |  直到 6 年前
        1
  •  2
  •   marstran    6 年前

    您可以这样做:

    dataList.groupBy { it.a }
            .mapValues { (_, v) -> v.associate { it.b to it.c } }
    

    这个 groupBy 函数创建 Map<Int, List<Data>> ,其中 List<Data> 中共享相同值的所有数据对象 a Map