user3684156
user3684156

Reputation: 31

Want to compare two hashmaps and remove them

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

Answers (4)

mkrakhin
mkrakhin

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

Krunal Patel
Krunal Patel

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

Wundwin Born
Wundwin Born

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

user3145373 ツ
user3145373 ツ

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

Related Questions