Kotlin集合操作 ⑤ ( Map 集合 | 获取 Map 值 | Map 遍历 | 可变 Map 集合 )
Posted 韩曙亮
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin集合操作 ⑤ ( Map 集合 | 获取 Map 值 | Map 遍历 | 可变 Map 集合 )相关的知识,希望对你有一定的参考价值。
文章目录
一、Map 集合
调用 mapOf 函数 创建 Map 集合 , 键值对 元素有两种初始化方式 :
- 使用 to 函数进行初始化 : 在参数中使用
键 to 值
的方式进行初始化 ; - 使用 Pair 对象进行初始化 : 传入
Pair(键, 值)
进行初始化 ;
to 函数原型如下 , 其本质也是返回 Pair 类型的实例对象 ;
/**
* 从this和[that]创建类型为[Pair]的元组。
* 这对于创建噪音更少的[Map]字面量很有用,例如:
* @sample samples.collections.Maps.Instantiation.mapFromPairs
*/
public infix fun <A, B> A.to(that: B): Pair<A, B> = Pair(this, that)
代码示例 :
fun main()
val map = mapOf("Tom" to 18, "Jerry" to 12, "Jack" to 20)
println(map)
val map2 = mapOf(Pair("Tom", 18), Pair("Jerry", 12), Pair("Jack", 20))
println(map2)
执行结果 :
Tom=18, Jerry=12, Jack=20
Tom=18, Jerry=12, Jack=20
二、获取 Map 值
获取 Map 值 :
- 使用 取值运算符
[]
获取 Map 集合中的值 , 运算符中传入 键 , 如果找不到 键 对应的 值 , 返回 null ; - 使用 Map#getValue 函数 , 获取 键 对应的 值 , 如果没有找到则抛出异常 ;
public fun <K, V> Map<K, V>.getValue(key: K): V = getOrImplicitDefault(key)
- 使用 Map#getOrElse 函数 , 获取 键 对应的 值 , 如果没有找到则返回 Lambda 表达式 参数 的返回值 ;
public inline fun <K, V> Map<K, V>.getOrElse(
key: K,
defaultValue: () -> V): V = get(key) ?: defaultValue()
- 使用 Map#getOrDefault 函数 , 获取 键 对应的 值 , 如果没有找到则返回默认值 ;
public fun getOrDefault(key: K, defaultValue: @UnsafeVariance V): V
// See default implementation in JDK sources
throw NotImplementedError()
代码示例 :
fun main()
val map = mapOf("Tom" to 18, "Jerry" to 12, "Jack" to 20)
println(map)
val map2 = mapOf(Pair("Tom", 18), Pair("Jerry", 12), Pair("Jack", 20))
println(map2)
// 使用 取值运算符 `[]` 获取 Map 集合中的值 , 运算符中传入 键 , 如果找不到 键 对应的 值 , 返回 null
println(map["Tom"])
// 使用 Map#getValue 函数 , 获取 键 对应的 值 , 如果没有找到则抛出异常
println(map.getValue("Tom"))
// 使用 Map#getOrElse 函数 , 获取 键 对应的 值 , 如果没有找到则返回 Lambda 表达式 参数 的返回值
println(map.getOrElse("Tim", 20))
// 使用 Map#getOrDefault 函数 , 获取 键 对应的 值 , 如果没有找到则返回默认值
println(map.getOrDefault("Tim", 88))
执行结果 :
Tom=18, Jerry=12, Jack=20
Tom=18, Jerry=12, Jack=20
18
18
20
88
三、Map 遍历
Map 遍历方式 :
- forEach 函数 , 传入 Lambda 表达式参数 , 该 Lambda 表达式的参数为
Map.Entry<K, V>
类型 ;
public inline fun <K, V> Map<out K, V>.forEach(action: (Map.Entry<K, V>) -> Unit): Unit
for (element in this) action(element)
- forEach 函数 , 传入 Lambda 表达式参数 , 该 Lambda 表达式的 两个参数为 实际的 键值对 的类型 ;
default void forEach(BiConsumer<? super K, ? super V> action)
Objects.requireNonNull(action);
for (Map.Entry<K, V> entry : entrySet())
K k;
V v;
try
k = entry.getKey();
v = entry.getValue();
catch(IllegalStateException ise)
// this usually means the entry is no longer in the map.
throw new ConcurrentModificationException(ise);
action.accept(k, v);
代码示例 :
fun main()
val map = mapOf("Tom" to 18, "Jerry" to 12, "Jack" to 20)
println(map)
map.forEach
// 可操作 Entry 对象
println("$it.key = $it.value")
map.forEach key: String, value: Int ->
// 可获取具体的键和值
println("$key = $value")
执行结果 :
Tom=18, Jerry=12, Jack=20
Tom = 18
Jerry = 12
Jack = 20
Tom = 18
Jerry = 12
Jack = 20
四、可变 Map 集合
通过调用 mutableMapOf 函数 , 可创建 可变 Map 集合 ;
代码示例 :
fun main()
val mutableMap = mutableMapOf("Tom" to 18, "Jerry" to 12, "Jack" to 20)
println(mutableMap)
// 增加元素
mutableMap += "Rose" to 18
mutableMap.put("Tim", 21)
println(mutableMap)
// 查询是否有 某个键 对应的值, 如果没有则添加一个默认值进去
mutableMap.getOrPut("Kate", 19 )
println(mutableMap)
执行结果 :
Tom=18, Jerry=12, Jack=20
Tom=18, Jerry=12, Jack=20, Rose=18, Tim=21
Tom=18, Jerry=12, Jack=20, Rose=18, Tim=21, Kate=19
以上是关于Kotlin集合操作 ⑤ ( Map 集合 | 获取 Map 值 | Map 遍历 | 可变 Map 集合 )的主要内容,如果未能解决你的问题,请参考以下文章
Kotlin集合操作总结 ( List 集合 | MutableList 集合 | List 集合遍历 | Set 集合 | MutableSet 集合 | Map 集合 | 可变 Map集合 )
Kotlin集合操作总结 ( List 集合 | MutableList 集合 | List 集合遍历 | Set 集合 | MutableSet 集合 | Map 集合 | 可变 Map集合 )