关联与扁平化
associate 与 flatMap
关联与扁平化 是 CoddyKit 上的免费 Kotlin Academy 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Kotlin Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Kotlin Academy 课程共包含 4 节课。
关联与扁平化
这里还有两个强大的集合工具:associate 系列函数可以从列表构建映射,flatMap / flatten 可以将嵌套集合转换为一个扁平集合。
associateWith 函数
associateWith 会使用每个元素作为键,并通过 lambda 表达式计算其值,从而生成一个映射。
fun main() {
val words = listOf("a", "bb", "ccc")
val lengths = words.associateWith { it.length }
println(lengths)
}associateBy 函数
associateBy 则相反:它根据每个元素计算键,并将该元素保留为值。
data class User(val id: Int, val name: String)
fun main() {
val users = listOf(User(1, "Ann"), User(2, "Bob"))
val byId = users.associateBy { it.id }
println(byId[2]?.name)
}关联函数
通用的 associate 可以通过为每个元素返回一个 Pair,同时构建键和值。
fun main() {
val names = listOf("Ann", "Bob", "Cy")
val map = names.associate { it to it.length }
println(map)
}重复键
如果关联函数中的两个元素生成了相同的键,则最后一个元素会覆盖前一个元素。如果需要保留每个元素,请确保键是唯一的。
fun main() {
val words = listOf("apple", "ant", "bee")
val byFirst = words.associateBy { it.first() }
println(byFirst)
}flatten 函数
flatten 接受一个由集合组成的集合,并将它们合并为一个扁平列表。
fun main() {
val nested = listOf(listOf(1, 2), listOf(3, 4), listOf(5))
val flat = nested.flatten()
println(flat)
}flatMap 函数
flatMap 会将每个元素映射为一个集合,然后将所有这些集合展平为一个列表。它在一个步骤中完成了映射和展平。
fun main() {
val words = listOf("hi", "ok")
val chars = words.flatMap { it.toList() }
println(chars)
}对嵌套数据使用 flatMap
flatMap 非常适合将嵌套结构展开为单个元素序列。
data class Team(val members: List<String>)
fun main() {
val teams = listOf(Team(listOf("Ann", "Bob")), Team(listOf("Cy")))
val everyone = teams.flatMap { it.members }
println(everyone)
}flatMap 与映射的比较
如果每个元素恰好产生一个结果,请使用 map。如果每个元素产生一个集合,并且您希望将它们全部合并为一个扁平列表,请使用 flatMap。
fun main() {
val numbers = listOf(1, 2, 3)
val mapped = numbers.map { listOf(it, it * 10) }
val flat = numbers.flatMap { listOf(it, it * 10) }
println("map: $mapped")
println("flatMap: $flat")
}组合关联与 FlatMap
这些工具经常一起出现在数据处理流程中:先展平嵌套数据,然后将其关联为查找映射,以便快速访问。
data class Order(val items: List<String>)
fun main() {
val orders = listOf(Order(listOf("pen", "ink")), Order(listOf("pen")))
val counts = orders.flatMap { it.items }.groupingBy { it }.eachCount()
println(counts)
}何时使用各个函数
要从列表构建快速查找映射,请选择 associateBy/associateWith;要压平嵌套集合,请选择 flatMap/flatten。它们让结构化数据的处理更加简洁清晰。
快速检查
flatMap 的作用是什么?
回顾
您已学习使用 associate、associateBy 和 associateWith 构建映射(重复键中最后一个值会生效),并使用 flatten 和 flatMap 消除嵌套。这些内容完善了您的集合工具箱,使您能够转换、组织、聚合和重构数据。
常见问题解答
「关联与扁平化」课时是免费的吗?
是的 — 「关联与扁平化」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Kotlin Academy 课程的其余内容,请升级到 CoddyKit PRO。 Kotlin Academy 课程共包含 4 节课。
「关联与扁平化」这节课中我会学到什么?
associate 与 flatMap 你通过在浏览器中直接运行的动手代码来练习 Kotlin Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Kotlin Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Kotlin Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「关联与扁平化」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Kotlin Academy 课中编写并运行代码吗?
能。每节 Kotlin Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。