List 概述
-
List 是一个不可变的有序集合,一旦创建就不能修改其内容,即不能添加、删除、更改元素
-
List 提供了丰富的操作函数来处理数据
一、转换操作
- 对 List 中的每个元素应用给定的转换函数
kotlin
val nums = listOf(1, 2, 3)
println("nums: $nums")
val newNums = nums.map { it * 2 }
println("newNums: $newNums")
# 输出结果
nums: [1, 2, 3]
newNums: [2, 4, 6]
- 对 List 中的每个元素应用给定的转换函数,同时提供元素的索引和值作为参数
kotlin
val nums = listOf(1, 2, 3)
println("nums: $nums")
val newNums = nums.mapIndexed { idx, value ->
"$idx-$value"
}
println("newNums: $newNums")
# 输出结果
nums: [1, 2, 3]
newNums: [0-1, 1-2, 2-3]
- 将嵌套 List 的所有元素合并到一个 List 中
kotlin
val list1 = listOf(listOf(1, 2), listOf(3, 4))
println("list1: $list1")
val list2 = list1.flatten()
println("list2: $list2")
# 输出结果
list1: [[1, 2], [3, 4]]
list2: [1, 2, 3, 4]
二、过滤操作
- 过滤出指定类型的元素
kotlin
val mixed = listOf(1, "A", 2, "B", 3)
println("mixed: $mixed")
val nums = mixed.filterIsInstance<Int>()
println("nums: $nums")
# 输出结果
mixed: [1, A, 2, B, 3]
nums: [1, 2, 3]
- 过滤出满足条件的元素
kotlin
val nums = listOf(1, 2, 3, 4, 5)
println("nums: $nums")
val result = nums.filter { it % 2 == 0 }
println("result: $result")
# 输出结果
nums: [1, 2, 3, 4, 5]
result: [2, 4]
- 过滤掉为 null 的元素
kotlin
val mixed = listOf(1, null, 2, null, 3)
println("mixed: $mixed")
val result = mixed.filterNotNull()
println("result: $result")
# 输出结果
mixed: [1, null, 2, null, 3]
result: [1, 2, 3]
三、排序操作
- 对元素进行升序排序
kotlin
val unsorted = listOf(3, 1, 4, 1, 5)
println("unsorted: $unsorted")
val sorted = unsorted.sorted()
println("sorted: $sorted")
# 输出结果
unsorted: [3, 1, 4, 1, 5]
sorted: [1, 1, 3, 4, 5]
- 对元素进行降序排序
kotlin
val unsorted = listOf(3, 1, 4, 1, 5)
println("unsorted: $unsorted")
val sortedDescending = unsorted.sortedDescending()
println("sortedDescending: $sortedDescending")
# 输出结果
unsorted: [3, 1, 4, 1, 5]
sortedDescending: [5, 4, 3, 1, 1]
- 对元素进行自定义升序排序
kotlin
val values = listOf("aa", "b", "ccc")
println("values: $values")
val custom = values.sortedBy { it.length }
println("custom: $custom")
# 输出结果
values: [aa, b, ccc]
custom: [b, aa, ccc]
四、分组操作
- 根据条件将元素分组,返回一个 Map,其中,键是分组条件的结果,值是对应的元素列表
kotlin
val words = listOf("apple", "banana", "orange", "pear")
println("words: $words")
val byLength = words.groupBy { it.length }
println("byLength: $byLength")
# 输出结果
words: [apple, banana, orange, pear]
byLength: {5=[apple], 6=[banana, orange], 4=[pear]}
- 根据条件将元素分组,分成两个 List,第一个 List 包含满足条件的元素,第二个 List 包含不满足条件的元素
kotlin
val words = listOf("apple", "banana", "orange", "pear")
println("words: $words")
val (longWords, shortWords) = words.partition { it.length > 5 }
println("longWords: $longWords")
println("shortWords: $shortWords")
# 输出结果
words: [apple, banana, orange, pear]
longWords: [banana, orange]
shortWords: [apple, pear]
五、集合操作
-
并集:
+
操作符用于合并两个 List 的元素,允许重复 -
真并集:union 用于合并两个 List 的元素,返回 Set,自动去重
-
交集:intersect 返回两个 List 中都存在的元素,返回 Set
-
差集:
-
操作符返回 a 有但 b 没有的元素
java
val a = listOf(1, 2, 3)
val b = listOf(2, 3, 4)
val union = a + b
val union2 = a.union(b)
val intersect = a.intersect(b)
val subtract = a - b
println("union: $union")
println("union2: $union2")
println("intersect: $intersect")
println("subtract: $subtract")
# 输出结果
union: [1, 2, 3, 2, 3, 4]
union2: [1, 2, 3, 4]
intersect: [2, 3]
subtract: [1]
六、归纳操作
- 对 List 的元素进行累积计算
kotlin
val numbers = listOf(1, 2, 3, 4)
val sum = numbers.reduce { acc, i -> acc + i }
println("sum: $sum")
# 输出结果
sum: 10
- 对 List 的元素进行累积计算,可以自定义初始值
kotlin
val numbers = listOf(1, 2, 3, 4)
val product = numbers.fold(1) { acc, i -> acc + i }
println("product: $product")
# 输出结果
sum: 11
七、窗口操作
- 将 List 划分为多个窗口,每个窗口包含 size 个连续元素
kotlin
val seq = listOf(1, 2, 3, 4, 5)
val pairs = seq.windowed(2)
println("pairs: $pairs")
# 输出结果
pairs: [[1, 2], [2, 3], [3, 4], [4, 5]]
- 将 List 划分为多个窗口,每个窗口包含 size 个连续元素,并对每个窗口应用处理函数并返回结果
kotlin
val seq = listOf(1, 2, 3, 4, 5)
val slidingAvg = seq.windowed(3) { it.average() }
println("slidingAvg: $slidingAvg")
# 输出结果
slidingAvg: [2.0, 3.0, 4.0]