我有两个哈希映射,如下所示
FieldType是一个JAXB对象。
Map<String, FieldType> onsDetailsMap = new LinkedHashMap<String, FieldType>();
Map<String, FieldType> uxDetailsMap = new LinkedHashMap<String, FieldType>();
我试图比较&#39; Key&#39;两个hashmap。如果两个键相等,我需要获取&#39;键&#39;它是JAXB对象,写入另一个hashmap并将其从实际的hashmap中删除。
尝试使用hashmap.remove(key)将其删除但是它抛出了java.util.ConcurrentModificationException
for (String key : onsDetailsMap.keySet()) {
if (uxDetailsMap.containsKey(key)) {
System.out.println("BOTH :: " +key);
onsDetailsMap.remove(key);
}else {
System.out.println("ONS only :: " +key);
}
答案 0 :(得分:3)
您无法在for循环中迭代map并同时从此地图中删除条目。 试试这个
Iterator entries = onsDetailsMap.entrySet().iterator();
while (entries.hasNext()) {
Entry<String, FieldType> entry = (Entry) entries.next();
if (uxDetailsMap.containsKey(entry.getKey()) {
System.out.println("BOTH :: " + entry.getKey());
entries.remove();
}
}
答案 1 :(得分:1)
Iterator<String, FieldType> iter = onsDetailsMap.entrySet().iterator();
while (iter.hasNext()) {
Entry<String, FieldType> entry = (Entry) entries.next();
if (uxDetailsMap.contains(entry.getKey()) {
iter.remove();
}
}
答案 2 :(得分:1)
试试这段代码,它运行良好
Iterator entries = onsDetailsMap.entrySet().iterator();
while (entries.hasNext()) {
Entry entry = (Entry) entries.next();
if(!uxDetailsMap.containsKey(entry.getKey()))
{
System.out.println("Single value:: " + entry.getKey());
entries.remove();
}
}
答案 3 :(得分:0)
for (Iterator<Map.Entry<String, Integer>> iterator = onsDetailsMap.entrySet().iterator(); iterator.hasNext();) {
Map.Entry<String, Integer> entry = iterator.next();
if (uxDetailsMap.containsKey(entry.getKey()))
iterator.remove();
}