推荐答案
在 Kotlin 中,groupBy、associateBy 和 partition 是常用的集合操作函数,它们分别用于不同的场景:
- groupBy: 根据指定的键选择器函数将集合中的元素分组,返回一个
Map,其中键是选择器函数的返回值,值是对应的元素列表。 - associateBy: 根据指定的键选择器函数将集合中的元素转换为一个
Map,其中键是选择器函数的返回值,值是元素本身。如果有多个元素具有相同的键,则最后一个元素会覆盖前面的元素。 - partition: 根据指定的谓词函数将集合分为两个列表,第一个列表包含满足谓词的元素,第二个列表包含不满足谓词的元素。
本题详细解读
groupBy 的用法
groupBy 函数用于将集合中的元素按照某个条件分组。它接受一个 lambda 表达式作为参数,该表达式定义了分组的键。返回的结果是一个 Map,其中键是 lambda 表达式的返回值,值是对应的元素列表。
val numbers = listOf(1, 2, 3, 4, 5, 6)
val grouped = numbers.groupBy { it % 2 }
println(grouped) // 输出: {1=[1, 3, 5], 0=[2, 4, 6]}在这个例子中,groupBy 根据元素是否为奇数或偶数将列表分组。
associateBy 的用法
associateBy 函数用于将集合中的元素转换为一个 Map。它接受一个 lambda 表达式作为参数,该表达式定义了 Map 的键。如果有多个元素具有相同的键,则最后一个元素会覆盖前面的元素。
data class Person(val id: Int, val name: String)
val people = listOf(Person(1, "Alice"), Person(2, "Bob"), Person(3, "Alice"))
val associated = people.associateBy { it.name }
println(associated) // 输出: {Alice=Person(id=3, name=Alice), Bob=Person(id=2, name=Bob)}在这个例子中,associateBy 根据 name 属性将 Person 对象转换为一个 Map,并且如果有多个 Person 对象具有相同的 name,则最后一个对象会覆盖前面的对象。
partition 的用法
partition 函数用于将集合中的元素根据某个条件分为两个列表。它接受一个 lambda 表达式作为参数,该表达式定义了分区的条件。返回的结果是一个 Pair,其中第一个列表包含满足条件的元素,第二个列表包含不满足条件的元素。
val numbers = listOf(1, 2, 3, 4, 5, 6)
val (even, odd) = numbers.partition { it % 2 == 0 }
println(even) // 输出: [2, 4, 6]
println(odd) // 输出: [1, 3, 5]在这个例子中,partition 将列表中的元素分为偶数和奇数两个列表。