标准库
概述
Kotlin标准库提供了丰富的函数、类和扩展,涵盖集合操作、字符串处理、数学运算、I/O操作等各个方面。本章将详细介绍Kotlin标准库的核心功能和最佳实践。
集合操作函数
转换操作
kotlin
fun main() {
println("=== 集合转换操作 ===")
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val words = listOf("apple", "banana", "cherry", "date", "elderberry")
// map - 转换每个元素
val squared = numbers.map { it * it }
val lengths = words.map { it.length }
val upperCase = words.map { it.uppercase() }
println("原始数字: $numbers")
println("平方: $squared")
println("单词长度: $lengths")
println("大写单词: $upperCase")
// mapIndexed - 带索引的转换
val indexedSquares = numbers.mapIndexed { index, value ->
"[$index]: ${value * value}"
}
println("带索引的平方: $indexedSquares")
// mapNotNull - 转换并过滤null
val strings = listOf("1", "2", "abc", "4", "def")
val validNumbers = strings.mapNotNull { it.toIntOrNull() }
println("有效数字: $validNumbers")
// flatMap - 扁平化映射
val nestedLists = listOf(listOf(1, 2), listOf(3, 4), listOf(5, 6))
val flattened = nestedLists.flatMap { it }
println("扁平化: $flattened")
// flatten - 直接扁平化
val directFlattened = nestedLists.flatten()
println("直接扁平化: $directFlattened")
// associate - 创建映射
val wordToLength = words.associate { it to it.length }
val indexToWord = words.associateBy { it.first() }
val wordToUpper = words.associateWith { it.uppercase() }
println("单词到长度: $wordToLength")
println("首字母到单词: $indexToWord")
println("单词到大写: $wordToUpper")
}过滤操作
kotlin
fun main() {
println("=== 集合过滤操作 ===")
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val words = listOf("apple", "banana", "cherry", "date", "elderberry", "fig")
val mixedList = listOf(1, "hello", 2.5, true, null, "world")
// filter - 基本过滤
val evenNumbers = numbers.filter { it % 2 == 0 }
val longWords = words.filter { it.length > 5 }
println("偶数: $evenNumbers")
println("长单词: $longWords")
// filterIndexed - 带索引的过滤
val evenIndexElements = numbers.filterIndexed { index, _ -> index % 2 == 0 }
println("偶数索引的元素: $evenIndexElements")
// filterNot - 反向过滤
val oddNumbers = numbers.filterNot { it % 2 == 0 }
println("奇数: $oddNumbers")
// filterNotNull - 过滤null值
val nonNullItems = mixedList.filterNotNull()
println("非null项: $nonNullItems")
// filterIsInstance - 类型过滤
val strings = mixedList.filterIsInstance<String>()
val numbers2 = mixedList.filterIsInstance<Number>()
println("字符串: $strings")
println("数字: $numbers2")
// partition - 分区
val (evens, odds) = numbers.partition { it % 2 == 0 }
println("分区 - 偶数: $evens, 奇数: $odds")
// take/drop 系列
val firstThree = numbers.take(3)
val lastThree = numbers.takeLast(3)
val withoutFirstThree = numbers.drop(3)
val withoutLastThree = numbers.dropLast(3)
println("前3个: $firstThree")
println("后3个: $lastThree")
println("去掉前3个: $withoutFirstThree")
println("去掉后3个: $withoutLastThree")
// takeWhile/dropWhile - 条件取舍
val takeWhileSmall = numbers.takeWhile { it < 5 }
val dropWhileSmall = numbers.dropWhile { it < 5 }
println("取小于5的: $takeWhileSmall")
println("丢弃小于5的: $dropWhileSmall")
}聚合操作
kotlin
fun main() {
println("=== 集合聚合操作 ===")
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
val words = listOf("apple", "banana", "cherry", "date")
val emptyList = emptyList<Int>()
// 基本聚合
println("数字列表: $numbers")
println("求和: ${numbers.sum()}")
println("平均值: ${numbers.average()}")
println("最大值: ${numbers.maxOrNull()}")
println("最小值: ${numbers.minOrNull()}")
println("数量: ${numbers.count()}")
// sumOf - 自定义求和
val totalLength = words.sumOf { it.length }
println("单词总长度: $totalLength")
// maxBy/minBy - 按条件取最值
val longestWord = words.maxByOrNull { it.length }
val shortestWord = words.minByOrNull { it.length }
println("最长单词: $longestWord")
println("最短单词: $shortestWord")
// reduce - 归约操作
val product = numbers.reduce { acc, n -> acc * n }
println("乘积: $product")
// fold - 带初始值的归约
val sumWithInitial = numbers.fold(100) { acc, n -> acc + n }
val concatenated = words.fold("Words: ") { acc, word -> "$acc$word " }
println("带初始值的求和: $sumWithInitial")
println("连接字符串: $concatenated")
// 安全操作(处理空集合)
println("空列表最大值: ${emptyList.maxOrNull()}")
println("空列表求和: ${emptyList.sum()}")
// reduceOrNull/foldOrNull - 安全的归约
val safeProduct = emptyList.reduceOrNull { acc, n -> acc * n }
println("空列表安全乘积: $safeProduct")
// 分组聚合
val groupedByLength = words.groupBy { it.length }
val lengthCounts = words.groupingBy { it.length }.eachCount()
println("按长度分组: $groupedByLength")
println("长度计数: $lengthCounts")
// 复杂聚合示例
data class Student(val name: String, val grade: Int, val subject: String)
val students = listOf(
Student("Alice", 85, "Math"),
Student("Bob", 92, "Math"),
Student("Charlie", 78, "Science"),
Student("Diana", 95, "Math"),
Student("Eve", 88, "Science")
)
val mathAverage = students
.filter { it.subject == "Math" }
.map { it.grade }
.average()
val topStudent = students.maxByOrNull { it.grade }
val subjectAverages = students
.groupBy { it.subject }
.mapValues { (_, students) -> students.map { it.grade }.average() }
println("数学平均分: ${"%.1f".format(mathAverage)}")
println("最高分学生: ${topStudent?.name} (${topStudent?.grade})")
println("各科平均分: $subjectAverages")
}字符串操作
字符串处理函数
kotlin
fun main() {
println("=== 字符串处理函数 ===")
val text = " Hello, Kotlin World! "
val multilineText = """
Line 1
Line 2
Line 3
""".trimIndent()
// 基本操作
println("原始文本: '$text'")
println("长度: ${text.length}")
println("去空格: '${text.trim()}'")
println("大写: ${text.uppercase()}")
println("小写: ${text.lowercase()}")
// 检查操作
println("是否为空: ${text.isEmpty()}")
println("是否为空白: ${text.isBlank()}")
println("包含'Kotlin': ${text.contains("Kotlin")}")
println("以'Hello'开头: ${text.startsWith("Hello")}")
println("以'!'结尾: ${text.endsWith("!")}")
// 查找操作
println("'Kotlin'的位置: ${text.indexOf("Kotlin")}")
println("最后一个'l'的位置: ${text.lastIndexOf("l")}")
// 替换操作
println("替换'Kotlin'为'Java': ${text.replace("Kotlin", "Java")}")
println("替换第一个'l': ${text.replaceFirst("l", "L")}")
// 分割操作
val parts = text.trim().split(" ")
println("分割结果: $parts")
val csvData = "apple,banana,cherry"
val fruits = csvData.split(",")
println("CSV分割: $fruits")
// 子字符串操作
println("子字符串[2,7]: '${text.substring(2, 7)}'")
println("从索引7开始: '${text.substring(7)}'")
// 多行文本处理
println("多行文本:")
println(multilineText)
val lines = multilineText.lines()
println("行数: ${lines.size}")
println("各行: $lines")
// 字符串构建
val builder = StringBuilder()
builder.append("Hello")
builder.append(" ")
builder.append("World")
println("StringBuilder结果: $builder")
// 使用buildString
val builtString = buildString {
append("Kotlin")
append(" is")
append(" awesome!")
}
println("buildString结果: $builtString")
}字符串模板和格式化
kotlin
fun main() {
println("=== 字符串模板和格式化 ===")
val name = "Alice"
val age = 25
val score = 95.5
// 基本字符串模板
println("姓名: $name")
println("年龄: $age")
println("分数: $score")
// 表达式模板
println("明年年龄: ${age + 1}")
println("姓名长度: ${name.length}")
println("是否成年: ${age >= 18}")
// 复杂表达式
val message = "用户 $name (${age}岁) 的分数是 $score${if (score >= 90) " - 优秀!" else ""}"
println(message)
// 原始字符串模板
val json = """
{
"name": "$name",
"age": $age,
"score": $score
}
""".trimIndent()
printl