Kotlin Map映射转换问题小结
Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、mapValues、flatten、flatMap
引言
在之前的主题中,我们学习了如何筛选(filter)和排序(sort)集合。然而,处理集合时最重要的任务之一是转换集合中的元素。本主题将教你如何使用 Kotlin 的转换函数将一个集合转换为另一个集合。
映射(Mapping)
map()
用于将集合中的每个元素应用一个转换函数,返回一个新集合。
一对一转换:每个原始元素都对应一个转换后的元素。
示例:
val numbers = listOf(1, 2, 3)
println(numbers.map { it * 2 }) // [2, 4, 6]mapIndexed()
- 和
map()类似,但提供元素的 索引 作为额外参数。
val words = listOf("anne", "michael", "caroline")
println(words.mapIndexed { index, value ->
if (index % 2 == 0) value.uppercase() else value
}) // [ANNE, michael, CAROLINE]应用场景
获取每个字符串长度:
words.map { it.length }将字符串转为整数:
listOf("1", "2", "3").map { it.toInt() }首字母大写:
words.map { it.capitalize() }转换 Map 的键或值
可空类型的映射(Mapping with nullables)
如果某些元素无法转换,map() 会返回 null,集合变成 List<T?>。为避免 null,使用:
mapNotNull() / mapIndexedNotNull()
- 自动过滤掉为 null 的结果,使结果为非空集合(
List<T>)。
val numbers = listOf(1, 2, 3, 4, 5)
println(numbers.map { if (it % 2 == 0) it else null }) // [null, 2, null, 4, null]
println(numbers.mapNotNull { if (it % 2 == 0) it else null }) // [2, 4]映射 Map 类型(Map Mapping)
Kotlin 的 Map 类型可以使用以下两种方法转换:
mapKeys()
- 转换 Map 的 键
mapValues()
- 转换 Map 的 值
val map = mapOf(1 to "one", 2 to "two")
println(map.mapKeys { it.key * 2 }) // {2=one, 4=two}
println(map.mapValues { it.value.uppercase() }) // {1=ONE, 2=TWO}Flatten(扁平化)
flatten()
- 把嵌套集合(List of Lists)展开成一个单一列表。
val nested = listOf(listOf(1,2), listOf(3,4)) println(nested.flatten()) // [1, 2, 3, 4]
flatMap()
- 先
map,再flatten,适用于一对多转换。
val nested = listOf(listOf(1,2), listOf(3,4))
println(nested.flatMap { it.map { it * 2 } }) // [2, 4, 6, 8]- 也可以用于 List<Map> :
val listOfMaps = listOf(mapOf(1 to "one"), mapOf(2 to "two"))
val result = listOfMaps.flatMap { it.entries }.associate { it.toPair() }
println(result) // {1=one, 2=two}总结(Conclusion)
我们学到了多种转换集合的方式:
| 功能 | 方法 |
|---|---|
| 一对一转换 | map() |
| 一对一+索引 | mapIndexed() |
| 过滤 null 结果 | mapNotNull() |
| Map 键值转换 | mapKeys() / mapValues() |
| 多对一 | flatten() |
| 一对多 | flatMap() |
到此这篇关于Kotlin Map映射转换的文章就介绍到这了,更多相关Kotlin Map映射内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot实现MapperScan添加动态配置(占位符)
这篇文章主要介绍了SpringBoot实现MapperScan添加动态配置(占位符),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。2022-01-01
java 集合之实现类ArrayList和LinkedList的方法
下面小编就为大家带来一篇java 集合之实现类ArrayList和LinkedList的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-10-10


最新评论