Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 997
Vignesh Vino Avatar asked Dec 25 '22 21:12

Vignesh Vino


1 Answers

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());
    }
}
like image 59
Rohit Jain Avatar answered Jan 14 '23 14:01

Rohit Jain