4.Kotlin 集合 Map 所有方法
Kotlin Map 所有方法(按功能分类)
一、基础属性与判断
方法/属性 | 说明 | 示例 |
---|---|---|
size: Int | 键值对数量 | val map = mapOf(1 to "a", 2 to "b") map.size // 2 |
isEmpty(): Boolean | 判断是否为空映射 | mapOf<Int, String>().isEmpty() // true |
isNotEmpty(): Boolean | 判断是否为非空映射 | mapOf(1 to "a").isNotEmpty() // true |
二、元素访问与检查
方法 | 说明 | 示例 |
---|---|---|
containsKey(key: K): Boolean | 判断是否包含指定键 | val map = mapOf(1 to "a", 2 to "b") map.containsKey(1) // true |
containsValue(value: V): Boolean | 判断是否包含指定值 | val map = mapOf(1 to "a", 2 to "b") map.containsValue("a") // true |
get(key: K): V? | 获取指定键对应的值(无则返回 null) | val map = mapOf(1 to "a", 2 to "b") map.get(1) // "a" map[1] // 简写形式 |
getOrDefault(key: K, defaultValue: V): V | 获取值,无则返回默认值 | val map = mapOf(1 to "a") map.getOrDefault(2, "default") // "default" |
getValue(key: K): V | 获取值(无则抛异常) | val map = mapOf(1 to "a") map.getValue(1) // "a" |
三、键值集合获取
方法 | 说明 | 示例 |
---|---|---|
keys: Set<K> | 获取所有键的集合 | val map = mapOf(1 to "a", 2 to "b") map.keys // [1, 2] |
values: Collection<V> | 获取所有值的集合 | val map = mapOf(1 to "a", 2 to "b") map.values // ["a", "b"] |
entries: Set<Map.Entry<K, V>> | 获取所有键值对的集合 | val map = mapOf(1 to "a", 2 to "b") map.entries // [1=a, 2=b] |
四、迭代与遍历
方法 | 说明 | 示例 |
---|---|---|
iterator(): Iterator<Map.Entry<K, V>> | 返回键值对迭代器 | val map = mapOf(1 to "a", 2 to "b") val it = map.iterator() while (it.hasNext()) println(it.next()) |
forEach(action: (Map.Entry<K, V>) -> Unit) | 遍历所有键值对 | val map = mapOf(1 to "a", 2 to "b") map.forEach { entry -> println("${entry.key}: ${entry.value}") } |
forEach(action: (K, V) -> Unit) | 遍历所有键值对(解构参数) | val map = mapOf(1 to "a", 2 to "b") map.forEach { k, v -> println("$k: $v") } |
五、转换操作
方法 | 说明 | 示例 |
---|---|---|
toMap(): Map<K, V> | 转换为不可变映射(本身为Map时返回自身) | val map = mapOf(1 to "a") map.toMap() // {1=a} |
toMutableMap(): MutableMap<K, V> | 转换为可变映射 | val map = mapOf(1 to "a") val mutableMap = map.toMutableMap() mutableMap[2] = "b" // {1=a, 2=b} |
toList(): List<Pair<K, V>> | 转换为键值对列表 | val map = mapOf(1 to "a", 2 to "b") map.toList() // [(1, a), (2, b)] |
plus(pair: Pair<K, V>): Map<K, V> | 添加键值对并返回新映射(键重复会覆盖) | val map = mapOf(1 to "a") map.plus(2 to "b") // {1=a, 2=b} map.plus(1 to "c") // {1=c} |
plus(pairs: Iterable<Pair<K, V>>): Map<K, V> | 添加多个键值对并返回新映射 | val map = mapOf(1 to "a") map.plus(listOf(2 to "b", 3 to "c")) // {1=a, 2=b, 3=c} |
minus(key: K): Map<K, V> | 移除指定键并返回新映射 | val map = mapOf(1 to "a", 2 to "b") map.minus(1) // {2=b} |
minus(keys: Iterable<K>): Map<K, V> | 移除多个键并返回新映射 | val map = mapOf(1 to "a", 2 to "b", 3 to "c") map.minus(listOf(1, 3)) // {2=b} |
map(transform: (Map.Entry<K, V>) -> R): List<R> | 转换为列表 | val map = mapOf(1 to "a", 2 to "b") map.map { (k, v) -> "$k:$v" } // ["1:a", "2:b"] |
mapKeys(transform: (Map.Entry<K, V>) -> R): Map<R, V> | 转换键并返回新映射 | val map = mapOf(1 to "a", 2 to "b") map.mapKeys { (k, _) -> "key$k" } // {"key1"=a, "key2"=b} |
mapValues(transform: (Map.Entry<K, V>) -> R): Map<K, R> | 转换值并返回新映射 | val map = mapOf(1 to "a", 2 to "b") map.mapValues { (_, v) -> v.uppercase() } // {1=A, 2=B} |
六、过滤操作
方法 | 说明 | 示例 |
---|---|---|
filter(predicate: (Map.Entry<K, V>) -> Boolean): Map<K, V> | 过滤键值对并返回新映射 | val map = mapOf(1 to "a", 2 to "b", 3 to "c") map.filter { (k, _) -> k > 1 } // {2=b, 3=c} |
filterKeys(predicate: (K) -> Boolean): Map<K, V> | 按键过滤并返回新映射 | val map = mapOf(1 to "a", 2 to "b", 3 to "c") map.filterKeys { it % 2 == 0 } // {2=b} |
filterValues(predicate: (V) -> Boolean): Map<K, V> | 按值过滤并返回新映射 | val map = mapOf(1 to "a", 2 to "b", 3 to "c") map.filterValues { it > "a" } // {2=b, 3=c} |
filterIsInstance<K, V>(): Map<K, V> | 过滤指定类型的键值对 | val map = mapOf(1 to "a", "b" to 2) map.filterIsInstance<Int, String>() // {1=a} |
七、查找操作
方法 | 说明 | 示例 |
---|---|---|
entries.first(): Map.Entry<K, V> | 获取首个键值对(空映射抛异常) | mapOf(1 to "a", 2 to "b").entries.first() // 1=a |
entries.firstOrNull(): Map.Entry<K, V>? | 获取首个键值对(空映射返回 null) | mapOf<Int, String>().entries.firstOrNull() // null |
entries.last(): Map.Entry<K, V> | 获取最后一个键值对(空映射抛异常) | mapOf(1 to "a", 2 to "b").entries.last() // 2=b |
entries.lastOrNull(): Map.Entry<K, V>? | 获取最后一个键值对(空映射返回 null) | mapOf<Int, String>().entries.lastOrNull() // null |
firstKey(): K | 获取首个键(空映射抛异常) | mapOf(1 to "a", 2 to "b").firstKey() // 1 |
lastKey(): K | 获取最后一个键(空映射抛异常) | mapOf(1 to "a", 2 to "b").lastKey() // 2 |
find(predicate: (Map.Entry<K, V>) -> Boolean): Map.Entry<K, V>? | 查找首个满足条件的键值对 | val map = mapOf(1 to "a", 2 to "b") map.find { (k, _) -> k > 1 } // 2=b |
八、统计与判断
方法 | 说明 | 示例 |
---|---|---|
count(): Int | 键值对总数(等同于 size) | mapOf(1 to "a", 2 to "b").count() // 2 |
count(predicate: (Map.Entry<K, V>) -> Boolean): Int | 满足条件的键值对数量 | val map = mapOf(1 to "a", 2 to "b", 3 to "c") map.count { (k, _) -> k > 1 } // 2 |
all(predicate: (Map.Entry<K, V>) -> Boolean): Boolean | 是否所有键值对满足条件 | val map = mapOf(2 to "a", 4 to "b") map.all { (k, _) -> k % 2 == 0 } // true |
any(predicate: (Map.Entry<K, V>) -> Boolean): Boolean | 是否存在满足条件的键值对 | val map = mapOf(1 to "a", 3 to "b", 4 to "c") map.any { (k, _) -> k % 2 == 0 } // true |
none(predicate: (Map.Entry<K, V>) -> Boolean): Boolean | 是否无键值对满足条件 | val map = mapOf(1 to "a", 3 to "b") map.none { (k, _) -> k % 2 == 0 } // true |
九、其他常用方法
方法 | 说明 | 示例 |
---|---|---|
toString(): String | 转换为字符串表示 | mapOf(1 to "a", 2 to "b").toString() // "{1=a, 2=b}" |
equals(other: Any?): Boolean | 判断内容是否相等 | mapOf(1 to "a").equals(mapOf(1 to "a")) // true |
hashCode(): Int | 计算哈希值 | mapOf(1 to "a").hashCode() // 哈希值(因环境而异) |
asSequence(): Sequence<Map.Entry<K, V>> | 转换为序列(延迟计算) | val map = mapOf(1 to "a", 2 to "b") map.asSequence().filter { (k, _) -> k > 1 }.toMap() // {2=b} |
onEach(action: (Map.Entry<K, V>) -> Unit): Map<K, V> | 遍历键值对并返回自身 | val map = mapOf(1 to "a", 2 to "b") map.onEach { println(it) } // {1=a, 2=b} |
associate(transform: (Map.Entry<K, V>) -> Pair<R, S>): Map<R, S> | 转换为新映射 | val map = mapOf(1 to "a", 2 to "b") map.associate { (k, v) -> (k * 2) to v.uppercase() } // {2=A, 4=B} |
associateBy(keySelector: (Map.Entry<K, V>) -> R): Map<R, Map.Entry<K, V>> | 按键选择器创建新映射 | val map = mapOf(1 to "a", 2 to "b") map.associateBy { (k, _) -> "key$k" } // {"key1"=1=a, "key2"=2=b} |