CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Kotlin 语言入门/课时/集合 API
RawBlame
课时目录12 节

Kotlin 语言入门

  1. 01Kotlin 是什么
  2. 02基础语法与类型
  3. 03控制流
  4. 04函数与 Lambda
  5. 05集合 API
  6. 06类与 OOP
  7. 07空安全
  8. 08协程
  9. 09JVM 与 Spring
  10. 10Android 与 Compose
  11. 11Ktor 服务端
  12. 12综合练习

集合 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)
}

Sequence 类似 Java Stream 的 lazy 模式,中间操作不立即执行。

与 Java 对照

KotlinJava
listOf(1, 2, 3)List.of(1, 2, 3)
slugs.filter { ... }slugs.stream().filter(...).toList()
lessons.groupBy { it.slug }Collectors.groupingBy
map.getOrDefault(k, 0)map.getOrDefault(k, 0)
listOf 只读Collections.unmodifiableList

练习

  • Map 存 slug→title,按 key 排序后打印
  • 用 groupBy 按 slug 前缀分组 lesson 列表
  • 对比 Java Stream 与 Kotlin 集合链式调用的写法

小结

List/Set/Map + filter/map/fold 是 Kotlin 日常数据处理核心。 下一课类与 OOP。见 kotlin-essentials。

加载本节练习…
← 上一课函数与 Lambda下一课 →类与 OOP