Kotlin中的集合操作

Kotlin 在集合操作上提供了一系列的扩展函数,使其变得非常强大且易于使用。以下是一些在Kotlin中常用的集合操作API,以及如何使用它们的示例:

1. Filtering (过滤)

​ 使用 filter 函数来过滤集合中符合条件的元素。

kotlin 复制代码
val numbers = listOf(1, 2, 3, 4, 5, 6)
val evenNumbers = numbers.filter { it % 2 == 0 } // 结果: [2, 4, 6]

2. Transforming (转换)

​ 使用 map 函数能够将集合中的元素进行转换。

kotlin 复制代码
val numbers = listOf(1, 2, 3, 4, 5, 6)
val squaredNumbers = numbers.map { it * it } // 结果: [1, 4, 9, 16, 25, 36]

3. Flattening (扁平化)

​ 对于嵌套集合,flatten 可以用来将嵌套的集合合并成一个集合,而 flatMap 可以在合并的同时进行转换。

kotlin 复制代码
val numberSets = listOf(setOf(1, 2, 3), setOf(4, 5, 6))
val flattened = numberSets.flatten() // 结果: [1, 2, 3, 4, 5, 6]

val container = listOf(listOf(1), listOf(2, 3), listOf(4, 5, 6))
val flattenedAndTransformed = container.flatMap { it.map { it * it } } // 结果: [1, 4, 9, 16, 25, 36]

4. Zipping (配对)

zip 函数能将两个集合中的元素按位置配对成一个新的集合。

kotlin 复制代码
val a = listOf(1, 2, 3)
val b = listOf("a", "b", "c")
val resultPairs = a.zip(b) // 结果: [(1, "a"), (2, "b"), (3, "c")]

5. Associating (关联)

associateWithassociateBy 用于生成Map,前者将每个元素作为键与某个值关联,后者则是将某个键与每个元素关联。

kotlin 复制代码
val numbers = listOf(1, 2, 3)
val numberToSquare = numbers.associateWith { it * it } // 结果: {1=1, 2=4, 3=9}

val names = listOf("Alice", "Bob", "Clara")
val nameToLength = names.associateBy { it.length } // 结果: {5=Alice, 3=Bob, 5=Clara}

6. Aggregating (聚合)

foldreduce 可用于根据一个起始值(对于 fold)或集合的一个初始元素(对于 reduce)逐个组合集合中的元素。

kotlin 复制代码
val numbers = listOf(1, 2, 3, 4, 5, 6)
val sum = numbers.reduce { total, next -> total + next } // 结果: 21

val startValue = 0
val sumWithStart = numbers.fold(startValue) { total, next -> total + next } // 结果: 21

7. Chunks (分块)

chunked 可以将集合分割为指定大小的小集合。

kotlin 复制代码
val numbers = (1..10).toList()
val chunks = numbers.chunked(3) // 结果: [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]

8. Grouping (分组)

groupBy 根据指定条件将集合中的元素分组。

kotlin 复制代码
val numbers = listOf("one", "two", "three", "four", "five")
val groupedByLength = numbers.groupBy { it.length } // 结果: {3=["one", "two"], 5=["three"], 4=["four", "five"]}

9. 取集合的各种部分 (Slicing)

​ 可以使用 slice 函数从集合中获取一系列特定的元素。

kotlin 复制代码
val numbers = listOf(1, 2, 3, 4, 5, 6)
val sliced = numbers.slice(1..3) // 结果: [2, 3, 4]

10. 去重 (Distinct)

distinct 函数用于去除集合中的重复元素。

kotlin 复制代码
val numbers = listOf(1, 2, 2, 3, 4, 4, 5)
val distinctNumbers = numbers.distinct() // 结果: [1, 2, 3, 4, 5]

11. 可变集合操作 (Mutable Collections)

​ 对于可变集合,可以使用 add, remove, addAll, removeAll, retainAll 等函数来直接修改集合。

kotlin 复制代码
val mutableListOfNumbers = mutableListOf(1, 2, 3)
mutableListOfNumbers.add(4) // 结果: [1, 2, 3, 4]
mutableListOfNumbers.remove(1) // 结果: [2, 3, 4]

12. Partitioning (分区)

partition 将集合分成两个集合,第一个集合包含符合某个条件的所有元素,第二个集合中则包含所有不符合这个条件的元素。

kotlin 复制代码
val numbers = (1..10).toList()
val (even, odd) = numbers.partition { it % 2 == 0 } // even: [2, 4, 6, 8, 10], odd: [1, 3, 5, 7, 9]

13. 排序 (Sorting)

​ 集合可以按自然顺序或给定的比较器进行排序。

kotlin 复制代码
val numbers = listOf(5, 4, 2, 1, 3)
val sortedNumbers = numbers.sorted() // 结果: [1, 2, 3, 4, 5]

val descendingSortedNumbers = numbers.sortedByDescending { it } // 结果: [5, 4, 3, 2, 1]

14. 判断集合元素的条件 (Any, All, None)

any, allnone 分别用来检查集合中是否有元素满足条件,是否所有元素满足条件,或者是否没有元素满足条件。

kotlin 复制代码
val numbers = listOf(1, 2, 3, 4, 5, 6)
val anyGreaterThanFour = numbers.any { it > 4 } // 结果: true
val allEvenNumbers = numbers.all { it % 2 == 0 } // 结果: false
val noneGreaterThanSix = numbers.none { it > 6 } // 结果: true

15. 取集合的极值 (Min and Max)

​ 可以使用 minOrNullmaxOrNull 函数快速找到集合中的最小值和最大值。

kotlin 复制代码
val numbers = listOf(1, 2, 3, 4, 5, 6)
val maxNumber = numbers.maxOrNull() // 结果: 6
val minNumber = numbers.minOrNull() // 结果: 1

16. 取集合中符合条件的单个元素 (Single Element)

​ 你可以用 first, firstOrNull, last, 和 lastOrNull 来获取集合中的第一个或最后一个符合条件的元素。

kotlin 复制代码
val numbers = listOf(1, 2, 3, 4, 5, 6)
val firstEven = numbers.firstOrNull { it % 2 == 0 } // 结果: 2
val lastLessThanFive = numbers.lastOrNull { it < 5 } // 结果: 4

17. 迭代 (Iteration)

​ 可以使用 forEach 函数对集合进行迭代操作。

kotlin 复制代码
val numbers = listOf(1, 2, 3, 4, 5)
numbers.forEach { println(it) } // 输出每个元素
相关推荐
极客先躯6 小时前
java和kotlin 可以同时运行吗
android·java·开发语言·kotlin·同时运行
滴水成冰-2 天前
Kotlin-Flow学习笔记
笔记·学习·kotlin
_Shirley2 天前
android.view.InflateException: Binary XML file line #7: Error inflating class
android·xml·java·ide·kotlin·android studio
ChinaDragonDreamer2 天前
Kotlin:1.9.0 的新特性
android·开发语言·kotlin
帅次4 天前
Android Studio:驱动高效开发的全方位智能平台
android·ide·flutter·kotlin·gradle·android studio·android jetpack
深海呐5 天前
Android 用线程池实现一个简单的任务队列(Kotlin)
android·kotlin·线程池·延时任务队列·线程池延时任务
我命由我123456 天前
Kotlin 极简小抄 P2(插值表达式、运算符、选择结构赋值)
android·java·开发语言·后端·kotlin·安卓
宝杰X76 天前
Compose Multiplatform+kotlin Multiplatfrom第三弹
android·开发语言·kotlin
jiet_h7 天前
Kotlin 中的 `flatMap` 方法详解
开发语言·微信·kotlin
jiet_h7 天前
Android Kotlin 中的 `groupBy` 方法详解
android·开发语言·kotlin