Kotlin: Как преобразовать список в список со списком?

У меня есть список ниже {("a", 1), ("b", 2), ("c", 3), ("a", 4)}

Я хочу преобразовать его в карту списка, как показано ниже {(«a» (1, 4)), («b», (2)), («c», (3)))}

т.е. для a, мы имеем список 1 и 4, так как ключ один и тот же.

Ответ в разделе Как конвертировать список в карту в Котлин? только показать уникальное значение (вместо дубликата, как у меня).

Я пробовал associateBy в Котлине

  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) 

Но, похоже, не работает. Как я мог сделать это в Котлине?

Код

 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) } 

Вывод

 {a=4, b=2, c=3} {a=[1, 4], b=[2], c=[3]} 

Как это работает

  • Сначала он берет список
  • Он группирует Combine по их альфа-значению с их num значениями

Сначала вы можете сгруппировать список по 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)