集合 API
List/Map/Set、filter/map/fold。
35 分钟
集合 API
Kotlin 标准库对集合提供了丰富的扩展函数:filter、map、fold、groupBy 等链式调用,比 Java Stream 更简洁,且区分可变与不可变集合。
学习目标
- 掌握
List、Set、Map的创建与基本操作 - 熟练使用
filter、map、fold、groupBy等函数式 API - 理解只读集合与可变集合的区别
创建与基本操作
fun main() {
// 只读 List
val slugs = listOf("kt-intro", "kt-syntax", "kt-control")
println(slugs[0])
println(slugs.size)
// 可变 List
val mutable = mutableListOf<String>()
mutable.add("kt-functions")
mutable.removeAt(0)
// Set 去重
val tags = setOf("kotlin", "jvm", "kotlin")
println(tags) // [kotlin, jvm]
// Map
val lessonCount = mapOf(
"kotlin-essentials" to 12,
"java-fundamentals" to 14
)
println(lessonCount["kotlin-essentials"])
println(lessonCount.getOrDefault("missing", 0))
}
listOf/setOf/mapOf 返回只读视图;mutableListOf 等可修改。
函数式变换
data class Lesson(val slug: String, val title: String, val order: Int)
fun main() {
val lessons = listOf(
Lesson("kt-intro", "Kotlin 是什么", 1),
Lesson("kt-syntax", "基础语法", 2),
Lesson("kt-control", "控制流", 3),
Lesson("kt-functions", "函数与 Lambda", 4)
)
val titles = lessons
.filter { it.order <= 3 }
.map { it.title }
println(titles)
val byPrefix = lessons.groupBy { it.slug.substringBefore("-") }
println(byPrefix.keys)
val totalOrders = lessons.fold(0) { acc, l -> acc + l.order }
println("序号总和: $totalOrders")
val sorted = lessons.sortedBy { it.order }
println(sorted.map { "${it.order}. ${it.title}" })
}
链式调用可读性高;groupBy 按 key 分组,fold 聚合。
遍历与解构
fun main() {
val counts = mapOf("kt-intro" to 1, "kt-syntax" to 2)
for ((slug, order) in counts) {
println("$slug -> $order")
}
val slugs = listOf("a", "b", "c")
slugs.forEachIndexed { index, slug ->
println("${index + 1}. $slug")
}
// 序列:惰性求值,适合大集合
val result = (1..1_000_000)
.asSequence()
.filter { it % 2 == 0 }
.take(5)
.toList()
println(result)
}