Kotlin中Map.minus方法应如何使用?为何减去Map未移除对应键值对?
Kotlin Map.minus方法运行逻辑与正确用法
核心运行逻辑
Map.minus的作用是从原Map中移除指定键对应的条目,返回保留原顺序的新Map,该方法的所有重载仅接收键/键集合类型的参数:
- 重载1:接收单个
K类型的键,移除对应单个条目 - 重载2:接收
Iterable<K>类型的键集合,移除集合内所有键对应的条目 - 重载3:接收
Array<out K>类型的键数组,移除数组内所有键对应的条目 - 重载4:接收
Sequence<K>类型的键序列,移除序列内所有键对应的条目
代码不符合预期的原因
你传入minus方法的参数是right(Map类型),而Map本身实现了Iterable<Map.Entry<K,V>>接口,触发的是参数为Iterable<K>的重载,相当于你要移除的"键"是right的所有Entry对象,和原Map的Int类型键完全不匹配,因此没有任何条目被移除,输出和原Map一致。
正确使用方式
移除单个指定键
直接传入对应键即可:
// 移除key为1的条目 val diff = left.minus(1)
移除另一个Map中所有键对应的条目
传入另一个Map的keys属性,即可得到你预期的结果:
fun main() { val left = mapOf(1 to "first", 2 to "second") val right = mapOf(1 to "first") val diff = left.minus(right.keys) println(left) println(right) println(diff) }
运行输出:
{1=first, 2=second} {1=first} {2=second}
批量移除多个指定键
可传入任意键的集合、数组、序列:
// 移除key为1、2的条目 val diff = left.minus(listOf(1,2))
内容的提问来源于stack exchange,提问作者Fabian
相关产品推荐
相关产品推荐

