如何通过特定属性组合对象的字段?

时间:2020-06-16 13:23:28

标签: kotlin

我需要按Person过滤这些name对象,然后计算每个唯一Device的{​​{1}}的数量。

name

最终结果应该是:

data class Device(val name: String, val price: Int)
data class Person(val name: String, val age: Int, val devices: List<Device>)
data class PersonFinal(val name: String, val age: Int, val count: Int)

val person1 = Person("Jack", 20, listOf(Device("Samsung", 1500), Device("iPhone", 2500)))
val person2 = Person("Jack", 20, listOf(Device("Samsung", 3500), Device("iPhone", 5500)))
val person3 = Person("John", 20, emptyList())

如何使用Kotlin做到这一点?

1 个答案:

答案 0 :(得分:0)

如果有人需要,我的最终解决方案如下:

listOf(person1, person2, person3)
        .groupBy { it.name }
        .map { (_, list) -> 
            PersonFinal(list.first().name, list.first().age, list.sumBy { it.devices.count() })
        }

打印[PersonFinal(name=Jack, age=20, count=4), PersonFinal(name=John, age=20, count=0)]

相关问题