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) } // 输出每个元素
相关推荐
xidianjiapei00140 分钟前
为何应将微服务从Java迁移到Kotlin:经验与见解【来自DZone】
java·微服务·kotlin
xvch10 小时前
Kotlin 2.1.0 入门教程(五)
android·kotlin
xvch14 小时前
Kotlin 2.1.0 入门教程(七)
android·kotlin
zhangphil16 小时前
Android BitmapShader简洁实现马赛克,Kotlin(一)
android·kotlin
五味香1 天前
Java学习,查找List最大最小值
android·java·开发语言·python·学习·golang·kotlin
五味香2 天前
Java学习,List截取
android·java·开发语言·python·学习·golang·kotlin
xvch2 天前
Kotlin 2.1.0 入门教程(三)
android·kotlin
小李飞飞砖3 天前
kotlin的协程的基础概念
开发语言·前端·kotlin
深色風信子3 天前
Kotlin Bytedeco OpenCV 图像图像49 仿射变换 图像裁剪
opencv·kotlin·javacpp·bytedeco·仿射变换 图像裁剪
五味香3 天前
Java学习,List移动元素
android·java·开发语言·python·学习·kotlin·list