2013-08-29 3 views
1

У меня есть следующие карты:Обновление карты в Java

Map <String,String> m; // contains part details 
Map <String,String> n; // contains part details 
Map <String,String> o; // the new map that contains both m and n. 
  1. Я хочу скопировать значения из m в о первой.
  2. I then want to loop while n и сравнивать ключи на o. Если ключ от n, не существует в o, тогда введите ключ/значение в значение o.

Я попытался ниже, но второй шаг не работает (значения не копировать)

for (Map.Entry<String, String> entry : m.entrySet()) 
{ 
    String key = entry.getKey(); 
    String value =entry.getValue(); 

    o.put(key, value); 
} 


for (Map.Entry<String, String> entry : n.entrySet()) 
{ 
    String key = entry.getKey(); 
    String value =entry.getValue(); 

    for (Map.Entry<String, String> entry1 : o.entrySet()) 
    { 
     String key1 = entry.getKey(); 

     if(key1 != key) 
     { 
       o.put(key,value); 
     } 

    }  
} 
+0

это s очень простой. вы должны попытаться сделать это сами. – DarthVader

+0

Посмотрите здесь http://stackoverflow.com/questions/4701960/union-of-two-or-more-hashmaps – Tala

+0

Ошибка в 'String key1 = entry.getKey();' она должна быть 'String key1 = entry1 .getKey(); '. В вашем ключе ключевого ключа1 это то же самое, что и ключ. Вы также должны использовать equals вместо! =, Поскольку ключ 2 может быть другим объектом, представляющим один и тот же ключ. Но 'addAll' сделает ваш код лучше. – Kazaag

ответ

0

рассмотреть вопрос об использовании карт # ContainsKey(). Вы также можете выполнять итерацию по набору ключей, а не по набору.

for (String key: n.keySet()) 
{ 
    if (!o.containsKey(key)) 
     o.put(key,n.get(key)); 
} 

Это должно сработать. Я думаю, проблема в том, что вы использовали прямое сравнение строк, чего недостаточно в вашем случае (почти никогда), вместо этого используйте метод String # compareTo().

0

Вам не нужно проходить через o.

Просто используйте метод

0

o.containsKey() Во втором внутреннем для контура "строка key1 = entry.getKey();" это должно быть «String key1 = entry1.getKey();» ошибается между входом и entry1

0
o.putAll(m); // put all m into o 
    n.keySet().removeAll(o.keySet()); // Remove all duplicates from n 
    o.putAll(n); // Now add all filtered n to o 
Смежные вопросы