bouzuya.hatenablog.com

ぼうずやのにっき

Kotlin の groupBy

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
}

今日のコミット。