推荐答案
在 Kotlin 中,常用的集合操作函数包括:
map: 对集合中的每个元素进行转换,返回一个新的集合。filter: 根据条件过滤集合中的元素,返回符合条件的元素集合。flatMap: 对集合中的每个元素进行转换,并将结果展平为一个集合。reduce: 对集合中的元素进行累积操作,返回一个单一的结果。fold: 类似于reduce,但可以指定初始值。forEach: 对集合中的每个元素执行指定的操作。groupBy: 根据指定的条件对集合中的元素进行分组。sortedBy: 根据指定的条件对集合中的元素进行排序。distinct: 去除集合中的重复元素。any: 判断集合中是否存在满足条件的元素。all: 判断集合中的所有元素是否都满足条件。none: 判断集合中是否没有任何元素满足条件。find: 查找集合中第一个满足条件的元素。first: 获取集合中的第一个元素。last: 获取集合中的最后一个元素。take: 获取集合中的前 N 个元素。drop: 去除集合中的前 N 个元素。zip: 将两个集合合并为一个集合,每个元素是一个 Pair。partition: 根据条件将集合分为两个部分。associateBy: 将集合转换为 Map,键由指定的条件决定。
本题详细解读
Kotlin 提供了丰富的集合操作函数,这些函数可以帮助开发者以声明式的方式处理集合数据。以下是对常用集合操作函数的详细解释:
map
map 函数用于对集合中的每个元素进行转换。它接受一个 lambda 表达式作为参数,该表达式定义了如何转换每个元素。map 返回一个新的集合,包含转换后的元素。
val numbers = listOf(1, 2, 3)
val squares = numbers.map { it * it } // [1, 4, 9]filter
filter 函数用于根据条件过滤集合中的元素。它接受一个 lambda 表达式作为参数,该表达式定义了过滤条件。filter 返回一个新的集合,包含符合条件的元素。
val numbers = listOf(1, 2, 3, 4, 5)
val evenNumbers = numbers.filter { it % 2 == 0 } // [2, 4]flatMap
flatMap 函数用于对集合中的每个元素进行转换,并将结果展平为一个集合。它接受一个 lambda 表达式作为参数,该表达式返回一个集合。flatMap 返回一个新的集合,包含所有转换后的元素。
val numbers = listOf(1, 2, 3)
val flattened = numbers.flatMap { listOf(it, it * 2) } // [1, 2, 2, 4, 3, 6]reduce
reduce 函数用于对集合中的元素进行累积操作。它接受一个 lambda 表达式作为参数,该表达式定义了如何累积元素。reduce 返回一个单一的结果。
val numbers = listOf(1, 2, 3, 4)
val sum = numbers.reduce { acc, i -> acc + i } // 10fold
fold 函数类似于 reduce,但它可以指定一个初始值。它接受一个初始值和一个 lambda 表达式作为参数,该表达式定义了如何累积元素。fold 返回一个单一的结果。
val numbers = listOf(1, 2, 3, 4)
val sum = numbers.fold(10) { acc, i -> acc + i } // 20forEach
forEach 函数用于对集合中的每个元素执行指定的操作。它接受一个 lambda 表达式作为参数,该表达式定义了要执行的操作。
val numbers = listOf(1, 2, 3)
numbers.forEach { println(it) } // 输出 1, 2, 3groupBy
groupBy 函数用于根据指定的条件对集合中的元素进行分组。它接受一个 lambda 表达式作为参数,该表达式定义了分组条件。groupBy 返回一个 Map,键是分组条件,值是对应的元素集合。
val numbers = listOf(1, 2, 3, 4, 5)
val grouped = numbers.groupBy { it % 2 } // {1=[1, 3, 5], 0=[2, 4]}sortedBy
sortedBy 函数用于根据指定的条件对集合中的元素进行排序。它接受一个 lambda 表达式作为参数,该表达式定义了排序条件。sortedBy 返回一个新的集合,包含排序后的元素。
val numbers = listOf(3, 1, 4, 1, 5)
val sorted = numbers.sortedBy { it } // [1, 1, 3, 4, 5]distinct
distinct 函数用于去除集合中的重复元素。它返回一个新的集合,包含去重后的元素。
val numbers = listOf(1, 2, 2, 3, 3, 3) val distinctNumbers = numbers.distinct() // [1, 2, 3]
any
any 函数用于判断集合中是否存在满足条件的元素。它接受一个 lambda 表达式作为参数,该表达式定义了条件。any 返回一个布尔值,表示是否存在符合条件的元素。
val numbers = listOf(1, 2, 3, 4, 5)
val hasEven = numbers.any { it % 2 == 0 } // trueall
all 函数用于判断集合中的所有元素是否都满足条件。它接受一个 lambda 表达式作为参数,该表达式定义了条件。all 返回一个布尔值,表示是否所有元素都符合条件。
val numbers = listOf(2, 4, 6, 8)
val allEven = numbers.all { it % 2 == 0 } // truenone
none 函数用于判断集合中是否没有任何元素满足条件。它接受一个 lambda 表达式作为参数,该表达式定义了条件。none 返回一个布尔值,表示是否没有任何元素符合条件。
val numbers = listOf(1, 3, 5, 7)
val noEven = numbers.none { it % 2 == 0 } // truefind
find 函数用于查找集合中第一个满足条件的元素。它接受一个 lambda 表达式作为参数,该表达式定义了条件。find 返回第一个符合条件的元素,如果没有找到则返回 null。
val numbers = listOf(1, 2, 3, 4, 5)
val firstEven = numbers.find { it % 2 == 0 } // 2first
first 函数用于获取集合中的第一个元素。如果集合为空,则会抛出异常。可以使用 firstOrNull 来避免异常。
val numbers = listOf(1, 2, 3) val first = numbers.first() // 1
last
last 函数用于获取集合中的最后一个元素。如果集合为空,则会抛出异常。可以使用 lastOrNull 来避免异常。
val numbers = listOf(1, 2, 3) val last = numbers.last() // 3
take
take 函数用于获取集合中的前 N 个元素。它接受一个整数作为参数,表示要获取的元素数量。take 返回一个新的集合,包含前 N 个元素。
val numbers = listOf(1, 2, 3, 4, 5) val firstThree = numbers.take(3) // [1, 2, 3]
drop
drop 函数用于去除集合中的前 N 个元素。它接受一个整数作为参数,表示要去除的元素数量。drop 返回一个新的集合,包含去除前 N 个元素后的剩余元素。
val numbers = listOf(1, 2, 3, 4, 5) val afterTwo = numbers.drop(2) // [3, 4, 5]
zip
zip 函数用于将两个集合合并为一个集合,每个元素是一个 Pair。它接受另一个集合作为参数,返回一个新的集合,包含两个集合中对应位置的元素组成的 Pair。
val numbers = listOf(1, 2, 3)
val letters = listOf("a", "b", "c")
val zipped = numbers.zip(letters) // [(1, "a"), (2, "b"), (3, "c")]partition
partition 函数用于根据条件将集合分为两个部分。它接受一个 lambda 表达式作为参数,该表达式定义了分区条件。partition 返回一个 Pair,第一个元素是符合条件的元素集合,第二个元素是不符合条件的元素集合。
val numbers = listOf(1, 2, 3, 4, 5)
val (even, odd) = numbers.partition { it % 2 == 0 } // even=[2, 4], odd=[1, 3, 5]associateBy
associateBy 函数用于将集合转换为 Map,键由指定的条件决定。它接受一个 lambda 表达式作为参数,该表达式定义了如何生成键。associateBy 返回一个 Map,键是生成的条件,值是对应的元素。
val numbers = listOf(1, 2, 3, 4, 5)
val map = numbers.associateBy { it * 2 } // {2=1, 4=2, 6=3, 8=4, 10=5}