Kotlin 分组、映射等



我知道有很多这样的主题存在,但我根本不理解这个主题。对于初学者来说,需要对正在发生的事情进行准确的解释。

我有一份人员名单:

val person1 = Person("A", 8, 24,"darts")
val person2 = Person("A", 8, 24,"football")
val person3 = Person("A", 2, 24,"basketball")
val person4 = Person("B", 8, 24,"skiing")
val person5 = Person("B", 1, 24,"snowboard")

哪里

data class Person (val street: String, val number: Int, val age: Int, val hobby: String){
override fun toString(): String {
return "$street $number $age $hobby"
}
}

现在总结一下。如果我使用一个组通过结果将是带有键的映射,值我说得对吗? 其中键是我分组的目录,例如:

var grouping = list.groupBy { it.street }

结果是:

{A=[A 8 24 darts, A 8 24 football, A 2 24 basketball], B=[B 8 24 skiing, B 1 24 snowboard]}

现在我想按街道和数字等多个字段分组。怎么做? 此外,我想指定一个列表(我必须从这张地图上做某种投影?(人们在地址和数字下的爱好。例如,在地址 A 数字 8 下,我有一个列表(飞镖,足球(。

@Edit 我是否必须以某种方式将此列表划分为第二个对象类?

是的,groupBy返回一个映射,其中键是 lambda 返回的任何内容,值是原始列表中的项目列表。

要按一对事物进行分组,您需要能够拥有一个代表所有这些事物并且是唯一的键。这可能意味着另一个数据类,或者你可以将其连接为字符串。

data class Address(val street: String, val number: Int)
val grouping = list.groupBy { Address(it.street, it.number) }

为了使地图的值成为一种爱好,您可以使用mapkeys

val addressesToHobbies = grouping.mapKeys { it.map(Person::hobby) }

最新更新