Reputation: 31
I have two hashmaps intialised as below
FieldType is a JAXB object.
Map<String, FieldType> onsDetailsMap = new LinkedHashMap<String, FieldType>();
Map<String, FieldType> uxDetailsMap = new LinkedHashMap<String, FieldType>();
I'm trying to compare the 'Key' of two hashmap. If two keys are equal I need to fetch the 'Key' and it's JAXB object, write to another hashmap and remove it from the actual hashmap.
Tried to remove it with hashmap.remove(key) but it is throwing a 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);
}
Upvotes: 0
Views: 1844
Reputation: 3486
You cannot iterate over map in for loop and delete entries from this map simultaneously. Try this
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();
}
}
Upvotes: 4
Reputation: 186
Try this code it is run fine
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();
}
}
Upvotes: 1
Reputation: 3475
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();
}
Upvotes: 0
Reputation: 8146
Iterator<String, FieldType> iter = onsDetailsMap.entrySet().iterator();
while (iter.hasNext()) {
Entry<String, FieldType> entry = (Entry) entries.next();
if (uxDetailsMap.contains(entry.getKey()) {
iter.remove();
}
}
Upvotes: 1