开发者

Kotlin Map映射转换问题小结

目录
  • Kotlin 集合转换:map、mapIndexed、mapNotNull、mapKeys、mapValues、flatten、flatMap
    • 引言
    • 映射(Mapping)
      • 示例:
      • 应用场景
    • 可空类型的映射(Mapping with nullables)
      • 映射 Map 类型(Map Mapping)
        • Flatten(扁平化)
          • 总结(Conclusion)

          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 word编程客栈s = 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)php展开成一个单一列表。
          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 python"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映射内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

          0

          上一篇:

          下一篇:

          精彩评论

          暂无评论...
          验证码 换一张
          取 消

          最新开发

          开发排行榜