Reputation: 394
Is it possible to convert the following nested groupingBy
to Kotlin Collections equivalent?
run this code: 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)
}
Upvotes: 0
Views: 1622
Reputation: 14255
The order is a bit different but yes, it is possible:
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)
}
Upvotes: 5