【问题标题】:How to filter a Mutable Map in place in Kotlin如何在 Kotlin 中过滤可变映射
【发布时间】:2019-03-19 12:10:27
【问题描述】:

我想从MutableMap 中删除项目,类似于filter
在列表中我可以使用removeAll { }retainAll { }
(见这个问题:How to filter a list in-place with Kotlin?)。

Mutable Maps 有类似的东西吗?

编辑:

我发现 Map 的entries 属性有这些方法。

【问题讨论】:

  • 那么,为什么不使用过滤器 - val newMap: HashMap<String, Any> = oldMap.filter { entry -> /* some condition */ }
  • 旧地图是班级成员,所以我想保留它 val (final)

标签: dictionary kotlin


【解决方案1】:

一种选择是在地图的keys: MutableSet<K> 上进行操作,您可以在其中使用removeAll { ... }retainAll { ... },就像使用列表一样:

val m = mutableMapOf(1 to "a", 2 to "b")
m.keys.removeAll { it % 2 == 0 }
println(m) // {1=a}

(runnable sample)

如果只有键不足以用作谓词,您可以简单地对映射的条目集执行相同操作,entries: MutableSet<MutableEntry<K, V>>

val m = mutableMapOf(1 to "a", 2 to "b", 3 to "c")
m.entries.retainAll { it.key < 3 }
m.entries.removeAll { (k, v) -> k == 1 && v == "a" }
println(m) // {2=b}

(runnable sample)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-11
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    • 2017-03-21
    • 1970-01-01
    相关资源
    最近更新 更多