Вложенная группаBy в Котлине - PullRequest
0 голосов
/ 24 февраля 2019

Можно ли преобразовать следующие вложенные groupingBy в эквивалент коллекций Kotlin?

запустить этот код: https://rextester.com/IYJ63609

fun main(args: Array<String>) {
    data class Person(val name: String, val city: String, val phone: String)

    val people = listOf(
            Person("John", "Boston", "+1-888-123456"),
            Person("Svyatoslav", "Saint-Petersburg", "+7-999-456700"),
            Person("Svyatoslav", "Saint-Petersburg", "+7-999-456789"),
            Person("Vasilisa", "Saint-Petersburg", "+7-999-123456"))

    val phoneBook = people.stream().collect(
      java.util.stream.Collectors.groupingBy(Person::city, 
        java.util.stream.Collectors.groupingBy(Person::name)
      )
    )
    println(phoneBook)
}

1 Ответ

0 голосов
/ 24 февраля 2019

Порядок немного отличается, но да, это возможно:

fun main(args: Array<String>) {
    data class Person(val name: String, val city: String, val phone: String)

    val people = listOf(
            Person("John", "Boston", "+1-888-123456"),
            Person("Svyatoslav", "Saint-Petersburg", "+7-999-456700"),
            Person("Svyatoslav", "Saint-Petersburg", "+7-999-456789"),
            Person("Vasilisa", "Saint-Petersburg", "+7-999-123456"))

    val phoneBook = people.groupBy(Person::city)
                          .mapValues { (_, v) -> v.groupBy(Person::name) }
    println(phoneBook)
}
...