Kotlin Map映射轉(zhuǎn)換問題小結(jié)
Kotlin 集合轉(zhuǎn)換:map、mapIndexed、mapNotNull、mapKeys、mapValues、flatten、flatMap
引言
在之前的主題中,我們學習了如何篩選(filter)和排序(sort)集合。然而,處理集合時最重要的任務之一是轉(zhuǎn)換集合中的元素。本主題將教你如何使用 Kotlin 的轉(zhuǎn)換函數(shù)將一個集合轉(zhuǎn)換為另一個集合。
映射(Mapping)
map()
用于將集合中的每個元素應用一個轉(zhuǎn)換函數(shù),返回一個新集合。
一對一轉(zhuǎn)換:每個原始元素都對應一個轉(zhuǎn)換后的元素。
示例:
val numbers = listOf(1, 2, 3)
println(numbers.map { it * 2 }) // [2, 4, 6]mapIndexed()
- 和
map()類似,但提供元素的 索引 作為額外參數(shù)。
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 }將字符串轉(zhuǎn)為整數(shù):
listOf("1", "2", "3").map { it.toInt() }首字母大寫:
words.map { it.capitalize() }轉(zhuǎn)換 Map 的鍵或值
可空類型的映射(Mapping with nullables)
如果某些元素無法轉(zhuǎn)換,map() 會返回 null,集合變成 List<T?>。為避免 null,使用:
mapNotNull() / mapIndexedNotNull()
- 自動過濾掉為 null 的結(jié)果,使結(jié)果為非空集合(
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 類型可以使用以下兩種方法轉(zhuǎn)換:
mapKeys()
- 轉(zhuǎn)換 Map 的 鍵
mapValues()
- 轉(zhuǎn)換 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,適用于一對多轉(zhuǎn)換。
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}總結(jié)(Conclusion)
我們學到了多種轉(zhuǎn)換集合的方式:
| 功能 | 方法 |
|---|---|
| 一對一轉(zhuǎn)換 | map() |
| 一對一+索引 | mapIndexed() |
| 過濾 null 結(jié)果 | mapNotNull() |
| Map 鍵值轉(zhuǎn)換 | mapKeys() / mapValues() |
| 多對一 | flatten() |
| 一對多 | flatMap() |
到此這篇關(guān)于Kotlin Map映射轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)Kotlin Map映射內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot this調(diào)用@Bean效果詳解
這篇文章主要介紹了在一個@Bean方法內(nèi),this調(diào)用同一個類的@Bean方法會有什么效果,我們可以通過bean的名稱、bean的類型或者bean的名稱+類型來獲取容器中的bean2023-02-02
nacos配置中心遠程調(diào)用讀取不到配置文件的解決
這篇文章主要介紹了nacos配置中心遠程調(diào)用讀取不到配置文件的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。2022-01-01
關(guān)于@DS注解切換數(shù)據(jù)源失敗的原因?qū)崙?zhàn)記錄
項目配置了多個數(shù)據(jù)源,需要使用@DS注解來切換數(shù)據(jù)源,但是卻遇到了問題,下面這篇文章主要給大家介紹了關(guān)于@DS注解切換數(shù)據(jù)源失敗原因的相關(guān)資料,需要的朋友可以參考下2023-05-05
SpringBoot實現(xiàn)MapperScan添加動態(tài)配置(占位符)
這篇文章主要介紹了SpringBoot實現(xiàn)MapperScan添加動態(tài)配置(占位符),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教。2022-01-01
java 集合之實現(xiàn)類ArrayList和LinkedList的方法
下面小編就為大家?guī)硪黄猨ava 集合之實現(xiàn)類ArrayList和LinkedList的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10

