Kotlin 在集合操作上提供了一系列的扩展函数,使其变得非常强大且易于使用。以下是一些在Kotlin中常用的集合操作API,以及如何使用它们的示例:
使用 filter
函数来过滤集合中符合条件的元素。
val numbers = listOf(1, 2, 3, 4, 5, 6)
val evenNumbers = numbers.filter { it % 2 == 0 } // 结果: [2, 4, 6]
使用 map
函数能够将集合中的元素进行转换。
val numbers = listOf(1, 2, 3, 4, 5, 6)
val squaredNumbers = numbers.map { it * it } // 结果: [1, 4, 9, 16, 25, 36]
对于嵌套集合,flatten
可以用来将嵌套的集合合并成一个集合,而 flatMap
可以在合并的同时进行转换。
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]
zip
函数能将两个集合中的元素按位置配对成一个新的集合。
val a = listOf(1, 2, 3)
val b = listOf("a", "b", "c")
val resultPairs = a.zip(b) // 结果: [(1, "a"), (2, "b"), (3, "c")]
associateWith
和 associateBy
用于生成Map,前者将每个元素作为键与某个值关联,后者则是将某个键与每个元素关联。
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}
fold
和 reduce
可用于根据一个起始值(对于 fold
)或集合的一个初始元素(对于 reduce
)逐个组合集合中的元素。
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
chunked
可以将集合分割为指定大小的小集合。
val numbers = (1..10).toList()
val chunks = numbers.chunked(3) // 结果: [[1, 2, 3], [4, 5, 6], [7, 8, 9], [10]]
groupBy
根据指定条件将集合中的元素分组。
val numbers = listOf("one", "two", "three", "four", "five")
val groupedByLength = numbers.groupBy { it.length } // 结果: {3=["one", "two"], 5=["three"], 4=["four", "five"]}
可以使用 slice
函数从集合中获取一系列特定的元素。
val numbers = listOf(1, 2, 3, 4, 5, 6)
val sliced = numbers.slice(1..3) // 结果: [2, 3, 4]
distinct
函数用于去除集合中的重复元素。
val numbers = listOf(1, 2, 2, 3, 4, 4, 5)
val distinctNumbers = numbers.distinct() // 结果: [1, 2, 3, 4, 5]
对于可变集合,可以使用 add
, remove
, addAll
, removeAll
, retainAll
等函数来直接修改集合。
val mutableListOfNumbers = mutableListOf(1, 2, 3)
mutableListOfNumbers.add(4) // 结果: [1, 2, 3, 4]
mutableListOfNumbers.remove(1) // 结果: [2, 3, 4]
partition
将集合分成两个集合,第一个集合包含符合某个条件的所有元素,第二个集合中则包含所有不符合这个条件的元素。
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]
集合可以按自然顺序或给定的比较器进行排序。
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]
any
, all
和 none
分别用来检查集合中是否有元素满足条件,是否所有元素满足条件,或者是否没有元素满足条件。
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
可以使用 minOrNull
和 maxOrNull
函数快速找到集合中的最小值和最大值。
val numbers = listOf(1, 2, 3, 4, 5, 6)
val maxNumber = numbers.maxOrNull() // 结果: 6
val minNumber = numbers.minOrNull() // 结果: 1
你可以用 first
, firstOrNull
, last
, 和 lastOrNull
来获取集合中的第一个或最后一个符合条件的元素。
val numbers = listOf(1, 2, 3, 4, 5, 6)
val firstEven = numbers.firstOrNull { it % 2 == 0 } // 结果: 2
val lastLessThanFive = numbers.lastOrNull { it < 5 } // 结果: 4
可以使用 forEach
函数对集合进行迭代操作。
val numbers = listOf(1, 2, 3, 4, 5)
numbers.forEach { println(it) } // 输出每个元素