Kotlin で List<Pair<String, Int>>
を Map<String,List<Int>>
に変換するときは groupBy
を使うと良さそう。
@Test fun f() { val l = listOf("A" to 1, "A" to 2, "B" to 3) val m1 = l.fold(mutableMapOf<String, MutableList<Int>>()) { m, (k, v) -> m.getOrPut(k) { mutableListOf() }.add(v) m } as Map<String, List<Int>> val m2 = l.groupBy({ (k, _) -> k }, { (_, v) -> v }) val m3 = l.groupBy(Pair<String, Int>::first, Pair<String, Int>::second) m1 shouldBe mapOf("A" to listOf(1, 2), "B" to listOf(3)) m1 shouldBe m2 m1 shouldBe m3 }
今日のコミット。