Сравнение двух значений hashmap с ключами
У меня два 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", "");
Я хочу сравнить ключ hMap2 с hMap, которые не равны, мне нужно поместить его в другой hashMap. Для этого я пробовал что-то подобное.
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);
Вывод, который я получаю здесь
hashmap3 is {3=three, 2=two, 1=one, 4=four}
Мой ожидаемый результат
hashmap3 is {3=three, 4=four}
Пожалуйста, исправьте мою логику. Спасибо заранее
1 ответ
Вы действительно усложняете свою задачу. Вам вообще не нужно перебирать свою вторую карту. Ты можешь использовать Map#containsKey()
метод, чтобы проверить, являются ли значения в первой карте ключом во 2-й карте.
Итак, вам просто нужно перебрать первую карту. Поскольку вам нужны ключи и значения, вы можете перебирать Map.Entry
первой карты. Вы получаете это с помощью Map#entrySet()
,
Поскольку значения первой карты являются ключом вашей второй, вам нужно использовать containsKey
метод на Map.Entry#getValue()
метод:
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());
}
}