相当于Iterator。在Kotlin HashMap中移除?

时间:2017-12-12 19:39:33

标签: kotlin

很抱歉,如果这是一个愚蠢的问题 - 但在java中,我习惯于做类似以下的事情:

Iterator whatever = entrySet.iterator()
while (whatever.hasNext()) {
    for (int i = 0; i < 4; i++) {
        if (i == 3) {
            whatever.remove(whatever.next().key)
        }
    }
}

(伪代码和逻辑毫无意义)

但是,Kotlin中的hashmap不存在“remove”函数。我知道你可以在一个条件下使用removeIf,但我想在决定要删除之前循环一系列不同的条件 - 所有这些都不会避免并发修改异常。

在Kotlin这样做的方法是什么?

感谢您的时间!

2 个答案:

答案 0 :(得分:0)

在Kotlin中,您可以在可变映射条目上使用removeIf,而无需显式访问迭代器。

val entrySet = HashMap<String, String>()
entrySet.entries.removeIf { 
  // some predicate 
}

将删除所有与谓词匹配的条目

答案 1 :(得分:0)

val addedItems = HashMap<String, Int>()

fun main() {
    addedItems["Apple"] = 3
    addedItems["Lemon"] = 4

    println(addedItems)

    addedItems.values.removeAll { it == 4 }        //or remove by keys ".keys.removeAll{}
    println(addedItems)
}

输出:

{Apple=3, Lemon=4}
{Apple=3}