Котлин: сгруппируйте список в карту карт - PullRequest
0 голосов
/ 03 октября 2018

Как сгруппировать список в карту карт, используя лямбды?Императивное решение выглядит следующим образом:

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 Ответ

0 голосов
/ 03 октября 2018

Вы можете сделать это:

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

Функция groupBy создает Map<Int, List<Data>>, где List<Data> - это все объекты данных, которые имеют одинаковое значение в a.Затем я сопоставляю значения Map, создавая необходимую вам структуру.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...