2015-11-02 3 views
-2

У меня есть 3 карты, как этотдобавить 3 карты в одну карту в Java

map1 ={(1,"kamal"),(2,"amal")(3,"nimal")}; 
map2 ={(1,"gold fish"),(2,"carft")(3,"angel")}; 
map3 ={(1,"cat"),(2,"dog")(3,"rabit")}; 

мне нужно добавить те к одному newMap

затем я попытался

newMap.puttAll(map1); 
newMap.puttAll(map2); 
newMap.puttAll(map3); 

из пут {(1, «кошка»), (2, «собака») (3, «rabit»)}

map1 и map 2 заменены на карту 3. Мне нужно добавить эти 3 карты к новым Карта.

хотел из пут {(1,"kamal"),(2,"amal")(3,"nimal"),(4,"gold fish"),(5,"carft")(6,"angel"),(7,"cat"),(8,"dog")(9,"rabit")}

Вещь моя карта имеет тот же ключ, как я могу решить эту проблему

+0

Вы не можете повторить ключи в карте, значения заменяются. –

+0

Что вы хотите, чтобы ваша карта выглядела? – RealSkeptic

+0

Мне так хотелось: {(1, «kamal»), (2, «амаль») (3, «nimal»), (4, «золотая рыбка»), (5, «carft») (6, «ангел» "), (7," кошки "), (8," собаки ") (9," Rabit ")} – Zcon

ответ

3

Цитирование первую линию Javadoc для Map:

Объект, который отображает ключи к значения. Карта не может содержать дубликаты ключей; каждый ключ может отображать не более одного значения.

Цитирование Javadoc для put():

Если карта, ранее содержавшиеся отображение для ключа, старое значение заменяется указанным значением.

Вы получаете точно результат, как задокументировано. Последняя запись для каждого выигрыша.


Update

Поскольку теперь вы сказали, что вы хотите, чтобы результат:

{(1, "Камал"), (2, "Амаль") (3 , «nimal»), (4, «золотая рыбка»), (5, «carft») (6, «ангел»), (7, «cat»), (8, «собака») (9, «rabit ")}

Вы, кажется, не заботитесь о ключе, просто значения, поэтому добавьте все значения с помощью нового inc rementing ключ:

int newKey = 0; 
for (String value : map1.values()) 
    newMap.put(++newKey, value); 
for (String value : map2.values()) 
    newMap.put(++newKey, value); 
for (String value : map3.values()) 
    newMap.put(++newKey, value); 
0

Без дополнительной информации, трудно дать лучший ответ, но если ключи 1, 2, 3, ..., 9, было бы больше смысла использовать List, а не Map , Затем вы можете использовать addAll, чтобы добавить все элементы от одного List к другому.

Помните, что индексы начинаются от 0, так что вы получите первый товар, выполнив list.get(0);.

-1

Что вы можете сделать, это создать карту типа Map<Integer, List<String>> и добавить вручную.

/* 
*@param HashMap<Integer, ArrayList<String>> The map to be generated 
*@param HashMap<Integer, String> The map to add 
*@returns HashMap<Integer, ArrayList<String>> The final map after adding the given hashmap to it. 
*/ 

public HashMap<Integer, ArrayList<String>> addToMap(HashMap<Integer, ArrayList<String>>map, HashMap<Integer, String> mp) 
{ 
Iterator it = mp.entrySet().iterator(); 
while (it.hasNext()) { 
    Map.Entry pair = (Map.Entry)it.next(); 
List<String> list; 
    if(map.containsKey(pair.getKey()) 
    list = map.get(pair.getKey()); 
    else 
    List<String> list = new ArrayList(); 
    list.add(pair.getValue()); 
    map.put(pair.getKey, list); 
} 
return map; 
} 

Если вы хотите Ouput быть с инкрементного ключом, он становится простым.

Iterate, поддерживать итерация ключ

ArrayList<HashMap<Integer, String>> maps = new ArrayList(); 
maps.add(map1); 
maps.add(map2); 

for(int i = 0, index = 1; i < maps.size(); ++i) 
{ 
Iterator it = maps[i].entrySet().iterator(); 
while (it.hasNext()) { 
    Map.Entry pair = (Map.Entry)it.next(); 
    HashMap.put(index , mp.getValue()); 
    index ++; 
    } 
} 
0
import org.apache.commons.collections4.MapUtils; 
import org.apache.commons.collections4.Transformer; 

@SafeVarargs 
private static Map<Integer, String> putAllValuesToMapStartingWithKey(int startKey, Map<Integer, String>... sourceMaps) { 
    final Map<Integer, String> destinationMap = new TreeMap<>(); 
    final AtomicInteger counter = new AtomicInteger(startKey); 
    for (Map<Integer, String> sourceMap : sourceMaps) { 
     MapUtils.populateMap(destinationMap, sourceMap.values(), new Transformer<String, Integer>() { 
      @Override 
      public Integer transform(final String input) { 
       return counter.getAndIncrement(); 
      } 
     }); 
    } 
    return destinationMap; 
} 

Главный класс для тестирования:

public static void main(String[] args) { 
    Map<Integer, String> map1 = new HashMap<Integer, String>() {{ 
     put(1, "kamal"); 
     put(2, "amal"); 
     put(3, "nimal"); 
    }}; 
    Map<Integer, String> map2 = new HashMap<Integer, String>() {{ 
     put(1, "gold fish"); 
     put(2, "carft"); 
     put(3, "angel"); 
    }}; 
    Map<Integer, String> map3 = new HashMap<Integer, String>() {{ 
     put(1, "cat"); 
     put(2, "dog"); 
     put(3, "rabit"); 
    }}; 
    Map<Integer, String> map = putAllValuesToMapStartingWithKey(1, map1, map2, map3); 
    System.out.println(map); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^