2013-10-07 5 views
0

У меня есть два списка карт.Как слить список карт в java?

List<Map<String,String>> catDataToCache = new ArrayList(); 
List<Map<String,String>> catDataToCache2 = new ArrayList(); 

Каждая карта выглядит следующим образом

map('referer'=>'abc.com','category'=>'def.com') 

я должен объединить эти два. Я попробовал List.addAll(); Однако я получаю искаженную коллекцию.

+6

Каковы правила для "слияния"? Что означает «искаженный»? – chrylis

+0

Можете ли вы определить, что искажается? – JHS

ответ

2

Я считаю, что вы пытаетесь объединить отображения из двух или более Map. Если это так, вы делаете это с использованием Map#putAll() без привлечения List s, если на самом деле не хранятся Map. Это кажется маловероятным.

Map<String, String> map1 = new HashMap<String, String>(); 
map1.put("referrer", "abc.com"); 

Map<String, String> map2 = new HashMap<String, String>(); 
map2.put("category", "def.com"); 

Map<String, String> map3 = new HashMap<String, String>(); 

map3.putAll(map1); 
map3.putAll(map2); 

for (Map.Entry<String, String> mapping : map3.entrySet()) { 
    System.out.println(mapping.getKey() + " = " + mapping.getValue()); 
} 

Выход:

category = def.com 
referrer = abc.com 


Если вы на самом деле получить ваши Map S в List, просто перебрать его и использовать putAll(), как показано выше, для каждого Map. Если есть несколько таких List s, повторите цикл Iterator для каждого из них.

List<Map<String,String>> listOfMaps = new ArrayList<Map<String,String>>(); 

// initialize map1, map2, map3 same as above 

listOfMaps.add(map1); 
listOfMaps.add(map2); 

for (Iterator<Map<String, String>> iterator = 
         listOfMaps.iterator(); iterator.hasNext();) { 
    map3.putAll(iterator.next()); 
} 

for (Map.Entry<String, String> mapping : map3.entrySet()) { 
    System.out.println(mapping.getKey() + " = " + mapping.getValue()); 
} 
+0

спасибо за помощь. Однако я получаю список карт из функции, поэтому я не могу индивидуально объединить эти карты. – Shades88

+1

Рави показал вам, как решить вашу проблему в принципе. Чтобы обобщить вышеуказанный код, вам нужно будет перебирать карты, возвращаемые из метода, который вы вызываете, и делать что-то вроде map3.putAll (currentMap), где currentMap - это карта текущей итерации. – rcgeorge23

+0

@ Shades88, я обновил пример того, как обрабатывать карту 'List'. –

0
List<Map<String,String>> catDataToCache = new ArrayList<Map<String, String>>(); 
    List<Map<String,String>> catDataToCache2 = new ArrayList<Map<String, String>>(); 

    List<Map<String,String>> mergedDataToCache = new ArrayList<Map<String, String>>(); 

    mergedDataToCache.addAll(catDataToCache); 
    mergedDataToCache.addAll(catDataToCache2); 

    Map<String,String> mergedMap= new HashMap<String, String>(); 

    for(Map<String,String> map:mergedDataToCache){ 
     mergedMap.putAll(map); 
    } 
Смежные вопросы