首页 > 解决方案 > 从 Java 中的 Map 中删除元素

问题描述

我正在尝试从我的地图中删除一个元素,但它给出了一个错误。

代码:

Map<String, String> map = ["a":"test",
           "b":"test",
           "c":"test",
           "d":""]

for (data in map.entrySet()){
    if (data.getValue() != ""){
        map.remove(data.getKey())
    }
}

错误:

Caught: java.util.ConcurrentModificationException*
java.util.ConcurrentModificationException
at first_script.run(first_script.groovy:6)

Process finished with exit code 1

我知道它正在发生,因为我正试图同时删除它。有没有办法在不为我需要删除的元素创建列表的情况下做到这一点?

标签: javadictionaryhashmap

解决方案


尝试使用removeIf,还要注意你必须使用equals来检查字符串:

map.entrySet().removeIf(e -> !e.getValue().equals(""));

或者在您的情况下更好,您可以使用isEmpty

map.entrySet().removeIf(e -> !e.getValue().isEmpty())

或者更好,因为你基于你的条件值,你可以使用values(),而不是entrySet()

map.values().removeIf(v -> !v.isEmpty());

推荐阅读