Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中从映射中删除元素_Java_Dictionary_Hashmap - Fatal编程技术网

在Java中从映射中删除元素

在Java中从映射中删除元素,java,dictionary,hashmap,Java,Dictionary,Hashmap,我试图从我的地图中删除一个元素,但它给出了一个错误 代码: Map<String, String> map = ["a":"test", "b":"test", "c":"test", "d":""] for (data in map.entrySet()){ if (data.getValue() != ""){ map.remove(data.getKey()) } } Caug

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

代码:

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

我知道它正在发生,因为我正试图同时移除它。有没有办法不用为需要删除的元素创建列表就可以完成此操作?

尝试使用
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());