过滤与映射
转换集合
过滤与映射 是 CoddyKit 上的免费 Kotlin Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kotlin Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kotlin Academy 课程共包含 4 节课。
转换集合
Kotlin 集合提供了丰富的函数式操作。其中最常见的两个是 filter(选择元素)和 map(转换元素)。它们会返回新集合,并且永远不会修改原集合。
filter 函数
filter 只保留满足谓词的元素,并返回一个新列表。
fun main() {
val numbers = listOf(1, 2, 3, 4, 5, 6)
val evens = numbers.filter { it % 2 == 0 }
println(evens)
}filterNot 和 filterNotNull
filterNot 保留不匹配的元素。filterNotNull 移除空值元素,并返回一个非空列表。
fun main() {
val nums = listOf(1, 2, 3, 4)
println(nums.filterNot { it > 2 })
val withNulls = listOf(1, null, 3, null)
println(withNulls.filterNotNull())
}filterIndexed
filterIndexed 会在谓词中同时提供索引和值。
fun main() {
val letters = listOf("a", "b", "c", "d")
val result = letters.filterIndexed { index, _ -> index % 2 == 0 }
println(result)
}map 函数
map 对每个元素应用转换,并返回包含结果的新列表。结果类型可以不同于输入类型。
fun main() {
val numbers = listOf(1, 2, 3)
val squares = numbers.map { it * it }
println(squares)
}映射为另一种类型
map 可以改变元素类型,例如将数字转换为字符串。
fun main() {
val numbers = listOf(1, 2, 3)
val labels = numbers.map { "Item $it" }
println(labels)
}mapIndexed
mapIndexed 会在每个元素旁提供其索引,因此您可以在转换过程中使用元素的位置。
fun main() {
val fruits = listOf("apple", "banana", "cherry")
val numbered = fruits.mapIndexed { i, fruit -> "${i + 1}. $fruit" }
numbered.forEach { println(it) }
}mapNotNull
mapNotNull 转换每个元素,并丢弃结果为空的元素。这是一种结合映射和筛选的简洁方式。
fun main() {
val strings = listOf("1", "two", "3", "four")
val numbers = strings.mapNotNull { it.toIntOrNull() }
println(numbers)
}链式使用 filter 和 map
这些操作可以自然地组合。常见模式是先筛选,再映射筛选后保留的元素。
fun main() {
val numbers = listOf(1, 2, 3, 4, 5, 6)
val result = numbers
.filter { it % 2 == 0 }
.map { it * 10 }
println(result)
}操作不会修改原集合
filter 和 map 都会返回全新的列表。原集合不会改变,因此代码更安全,也更容易理解。
fun main() {
val original = listOf(1, 2, 3)
val doubled = original.map { it * 2 }
println("Original: $original")
println("Doubled: $doubled")
}在实践中进行筛选和映射
结合使用 filter 和 map,您可以以声明式方式表达数据流水线:描述您想要什么(WHAT),而不是描述如何循环(HOW)。这比手动编写带索引跟踪的 for 循环更清晰。
快速检查
过滤和映射有什么区别?
回顾
您已学习使用 filter(及其变体 filterNot、filterIndexed、filterNotNull)来选择元素,并使用 map(以及 mapIndexed、mapNotNull)来转换元素。它们可以顺畅地串联,且永远不会修改源集合。接下来,您将使用分组和分区来组织数据。
常见问题解答
「过滤与映射」课时是免费的吗?
是的 — 「过滤与映射」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Kotlin Academy 课程的其余内容,请升级到 CoddyKit PRO。 Kotlin Academy 课程共包含 4 节课。
「过滤与映射」这节课中我会学到什么?
转换集合 你通过在浏览器中直接运行的动手代码来练习 Kotlin Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Kotlin Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Kotlin Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「过滤与映射」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Kotlin Academy 课中编写并运行代码吗?
能。每节 Kotlin Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。