简体   繁体   中英

Comparing two hashmap value with keys

I have two HashMaps .

HashMap<String, String> hMap=new HashMap<String, String>();
hMap.put("1","one");
hMap.put("2", "two");
hMap.put("3", "three");
hMap.put("4", "four");

HashMap<String, String> hMap2=new HashMap<String, String>();
hMap2.put("one", "");
hMap2.put("two", "");

I want to compare the key of hMap2 with hMap which are not equal I need to put it in another hashMap.For this I tried something like this.

HashMap<String, String> hMap3=new HashMap<String, String>();
Set<String> set1=hMap.keySet();
Set<String> set2=hMap2.keySet();

Iterator<String> iter1=set1.iterator();
Iterator<String> iter2=set2.iterator();
String val="";
while(iter1.hasNext()) {

    val=iter1.next();
    System.out.println("key and value in hmap is "+val+" "+hMap.get(val));

    iter2=set2.iterator();

    while(iter2.hasNext()) {
        String val2=iter2.next();
        System.out.println("val2 value is "+val2);

        if(!hMap.get(val).equals(val2)) {
            hMap3.put(val, hMap.get(val));
            System.out.println("value adding");

        }
    }
}
System.out.println("hashmap3 is "+hMap3);

The output I'm getting here is

hashmap3 is {3=three, 2=two, 1=one, 4=four}

My Expected output is

hashmap3 is {3=three, 4=four}

Please correct my logic.Thanks in advance

You are really complicating your task. You don't need to iterate over your 2nd map at all. You can use Map#containsKey() method to check whether values in the first map is the key in the 2nd map.

So, you just need to iterate over the first map. Since you want both keys and values, you can iterate over the Map.Entry of the first map. You get that using Map#entrySet() .

Since the values of the first map is the key in your second, you need to use the containsKey method on the Map.Entry#getValue() method:

for (Entry<String, String> entry: hMap.entrySet()) {
    // Check if the current value is a key in the 2nd map
    if (!hMap2.containsKey(entry.getValue()) {

        // hMap2 doesn't have the key for this value. Add key-value in new map.
        hMap3.put(entry.getKey(), entry.getValue());
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM