Kotlin标准库:完整概述与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Kotlin标准库:完整概述



Kotlin标准库(stdlib)是一套内置于语言中的强大工具集。它提供了日常开发所需的一切:从集合和字符串操作到协程和序列化。与Java不同,Kotlin通过提供简洁且富有表现力的语法,消除了样板代码。在本概述中,我们将通过实际示例解析stdlib的关键模块。



1. 集合操作

该库提供了不可变(List、Set、Map)和可变(MutableList、MutableSet、MutableMap)集合,并配有丰富的高阶函数集。



val numbers = listOf(1, 2, 3, 4, 5)val doubled = numbers.map { it * 2 } // [2, 4, 6, 8, 10]val even = numbers.filter { it % 2 == 0 } // [2, 4]val sum = numbers.reduce { acc, i -> acc + i } // 15


关键函数:

  • map、filter、flatMap — 转换与过滤
  • groupBy、partition — 元素分组
  • zip、unzip — 集合合并
  • chunked、windowed — 分块处理


2. 字符串与正则表达式

Kotlin通过Java中缺失的方法扩展了String:删除前缀/后缀、空值检查、模板。



val text = "  Hello, Kotlin!  "println(text.trim()) // "Hello, Kotlin!"println(text.removePrefix("  ")) // "Hello, Kotlin!  "println(text.contains(Regex("Kotlin"))) // true

// 带trimIndent的多行字符串val json = """ { "name": "Kotlin", "year": 2016 }""".trimIndent()


3. 空安全与Elvis运算符

Kotlin的关键特性之一——内置的NPE防护。标准库提供了安全调用函数(?.let)和Elvis运算符(?:)。



val name: String? = getUserName()val length = name?.length ?: 0 // 如果name == null,则为0name?.let { println("Name is $it") } // 仅在name != null时执行


4. 协程(kotlinx.coroutines)

虽然协程形式上是一个独立的库,但它们被认为是Kotlin生态系统的一部分。允许以同步方式编写异步代码。



import kotlinx.coroutines.*

fun main() = runBlocking { launch { delay(1000L) println("World!") } println("Hello,")}


主要组件:

  • launch — 启动无返回值的协程
  • async — 启动并返回Deferred
  • withContext — 切换上下文(例如,切换到UI线程)
  • 通道(Channel) — 用于协程间数据传输


5. 序列化(kotlinx.serialization)

通过注解内置支持JSON、Protobuf、CBOR等格式。



import kotlinx.serialization.*import kotlinx.serialization.json.*

@Serializabledata class User(val name: String, val age: Int)

fun main() { val user = User("Alice", 30) val json = Json.encodeToString(user) println(json) // {"name":"Alice","age":30} val decoded = Json.decodeFromString<User>(json) println(decoded) // User(name=Alice, age=30)}


6. 序列与惰性计算

对于惰性计算,使用Sequence代替List——在处理大数据时节省内存。



val seq = generateSequence(1) { it + 1 } // 无限序列    .take(10)    .filter { it % 2 == 0 }    .toList()println(seq) // [2, 4, 6, 8, 10]


扩展函数

推荐