Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Kotlin分组、映射等_Kotlin_Collections_Group By_Mapping - Fatal编程技术网

Kotlin分组、映射等

Kotlin分组、映射等,kotlin,collections,group-by,mapping,Kotlin,Collections,Group By,Mapping,我知道有很多这样的话题,但我一点也不了解这个话题。对于初学者来说,需要一个准确的解释 我有一份人员名单: 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

我知道有很多这样的话题,但我一点也不了解这个话题。对于初学者来说,需要一个准确的解释

我有一份人员名单:

    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")
在哪里

现在总结一下。如果我使用groupBy,结果将是带有键和值的映射,对吗? 其中,键是我按如下方式进行分组的一个属性:

var grouping=list.groupBy{it.street}

结果是:

{A=[a24飞镖,824足球,224篮球],B=[b824滑雪,b124滑雪板]}

现在我想按多个字段分组,比如街道和号码。如何做到这一点? 此外,我还想列出人们在地址和数字下的爱好(我必须从这张地图上做一些投影?)。例如,在地址8下,我有一个列表(飞镖、足球)

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

是,
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) }

是,
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) }

非常感谢。但它会在对象列表中创建一个列表。如何只接收这些爱好的1个列表?如果是一小部分数据,我会跳过上面的所有内容,只需过滤原始列表:
val hobbiesAtAddressA8=list.filter{it.street==“a”&&it.number=8}
。如果这些是您将重复访问的大型数据集,您可以进行上述分组并按如下方式提取您需要的列表:
val hobbiesAtAddressA8=addressostocabiods[Address(“A”,8)]
。谢谢。但它会在对象列表中创建一个列表。如何只接收这些爱好的1个列表?如果是一小部分数据,我会跳过上面的所有内容,只需过滤原始列表:
val hobbiesAtAddressA8=list.filter{it.street==“a”&&it.number=8}
。如果这些是您将重复访问的大型数据集,您可以进行上述分组并按如下方式提取所需列表:
val hobbiesAtAddressA8=addressostocabiods[Address(“A”,8)]