在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());