kotlin中list.groupBy{}
时间: 2023-07-31 11:11:39 浏览: 138
longforus#studyNotes#Kotlin中groupBy和groupingBy使用中的对比1
在 Kotlin 中,`groupBy` 是一个很有用的函数,它可以将一个列表按照某个条件进行分组,并返回一个 `Map` 对象,其中 key 是分组的条件,value 是该条件下的所有元素组成的列表。
`groupBy` 接收一个 lambda 表达式作为参数,该 lambda 表达式会根据元素返回一个 key,表示该元素应该分到哪个组中。例如,假设有一个包含若干 Person 对象的列表,每个 Person 对象有一个 age 属性,我们可以按照年龄分组,代码如下:
```kotlin
val people = listOf(
Person("Alice", 25),
Person("Bob", 30),
Person("Charlie", 25),
Person("Dave", 30)
)
val groups = people.groupBy { it.age }
println(groups)
// 输出:{25=[Person(name=Alice, age=25), Person(name=Charlie, age=25)], 30=[Person(name=Bob, age=30), Person(name=Dave, age=30)]}
```
在上面的例子中,`groupBy` 函数将 people 列表按照 Person 对象的 age 属性进行分组,返回一个 `Map<Int, List<Person>>` 对象,其中 key 是年龄,value 是该年龄下的所有 Person 对象组成的列表。
除了 lambda 表达式外,`groupBy` 还可以接收一个可选的 transform 函数作为参数,用于将元素转换为分组的条件。例如,上面的例子可以写成这样:
```kotlin
val groups = people.groupBy(Person::age)
println(groups)
// 输出:{25=[Person(name=Alice, age=25), Person(name=Charlie, age=25)], 30=[Person(name=Bob, age=30), Person(name=Dave, age=30)]}
```
这里的 `Person::age` 就是一个 transform 函数,它将 Person 对象映射为它的 age 属性。
阅读全文