java - 从 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
我知道它正在发生,因为我正试图同时删除它。有没有办法在不为我需要删除的元素创建列表的情况下做到这一点?
解决方案
尝试使用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());
推荐阅读
- excel - 如何有条件地格式化(颜色等)由 Excel 中的 COUNTIF 函数计数的单元格
- ios - SwiftUI 自定义模态视图过渡滞后
- javascript - 尝试将汉堡菜单图标固定在左侧,并且在汉堡菜单打开时不移动
- android - fragment recyclerview 出现此错误 E/RecyclerView: No adapter attach; 跳过布局
- java - 为什么我会收到“找不到合适的驱动程序”错误?
- reactjs - 在 li 标签内反应多个标签
- image - “无法上传大于 5mb 的图像” - 使用图像魔法将图像转换为 5mg 的最大尺寸
- c++ - C++ 构造函数中的枚举
- java - 抽屉隐藏在自定义视图中
- xml - 尝试使用 JAXB 将 Double 转换为 XML 转换时如何避免指数(科学)字符串