2016-02-04 4 views
1

Я пытаюсь добавить ключ (String), значение (HashMap) в другую HashMap. Я как-то продолжаю смешивать синтаксис и логику здесь. Как мне это сделать? У меня есть KMAP здесь инициализируется, а затем я хочу, чтобы добавить ключ, который является строкой, а значение, которое является еще одним HashMap<String, List<Integer>>)Добавление HashMap в HashMap как значение

Их можно увидеть в приведенных ниже параметров:

static HashMap<String, HashMap<String, List<Integer>>> kmap = new HashMap<String, HashMap<String, List<Integer>>>(); 

public synchronized static void AddMapToList_ofMAP_(HashMap<String, List<Integer>> value, String key) { 

    if (!kmap.containsKey(key)) { 
     kmap.put(key, new HashMap<String, List<Integer>>()); 
    } 
    HashMap<String, List<Integer>> q = kmap.get(key); 

    q.put(key, value); 
} 
+0

чем проблема? – Vaseph

+1

В чем проблема, которую вы испытываете? Чтение синтаксиса кажется правильным – yugo

+0

«Значение», которое вы хотите добавить с помощью 'q.put (key, value)' должно быть 'List ', потому что 'q' является' Map > '. – Kenney

ответ

1

Это WAY проще, чем вы делаете это, кажется. Вам не нужен отдельный метод, просто вызовите метод put(key, value) на ваш kmap. Предполагая, что вы в переменной с именем value в Map<String, List<Integer>>, это просто:

kmap.put(key, value); 

Вот и все. Всего одна строка.

+1

вы правы, я сделал это намного сложнее, чем нужно. Одна строчка с номером делает то, что мне нужно, делает THANK U – dedpo

1

В ваших параметров вы получили значение HashMap. Затем вы пытаетесь добавить это к HashMap внутри HashMap, но значение в этом должно быть списком целых чисел.

Fix:

static HashMap<String, HashMap<String, List<Integer>>> kmap = new HashMap<String, HashMap<String, List<Integer>>>(); 

public synchronized static void AddMapToList_ofMAP_(
     List<Integer> value, String key) { 

    if (!kmap.containsKey(key)) { 
     kmap.put(key, new HashMap<String, List<Integer>>()); 
    } 
     HashMap<String, List<Integer>> q = kmap.get(key); 

     q.put(key, value); 
    } 

Кроме того, возможный способ сделать это лучше использует объект. Я не уверен, как код и то, что ваш ввод, но объект может работать.

Я также вижу, что вы получаете HashMap ключом, но вы также кладете этот ключ в HashMap (внутри), конечно, вы можете просто иметь 1 HashMap.

-1

Логика не ясна, но, может быть, вы хотите, чтобы это

q.put(key, value.get(key)); 

вместо этого:

q.put(key, value); 
1

Я не уверен, что именно вы пытаетесь достичь здесь. Вот что, возможно, вы захотите сделать. Не стесняйтесь писать больше тестовых примеров и оптимизировать код. Однако это даст вам основу для работы.

общественного класса Stackoverflow {

static HashMap<String, HashMap<String, List<Integer>>> kmap = new HashMap<String, HashMap<String, List<Integer>>>(); 

public synchronized static void addIntegerToKmap(String kmapKey, String intMapKey, Integer value) { 
    if (!kmap.containsKey(kmapKey)) { 
     Map<String, List<Integer>> intMap = new HashMap<String, List<Integer>>(); 

     HashMap<String, List<Integer>> stringListHashMap = new HashMap<String, List<Integer>>(); 
     List<Integer> integerList = new ArrayList<Integer>(); 

     integerList.add(value); 
     stringListHashMap.put(intMapKey, integerList); 
     kmap.put(kmapKey, stringListHashMap); 
    } 
    else { 
     HashMap<String, List<Integer>> stringListHashMap = kmap.get(kmapKey); 
     List<Integer> integerList = stringListHashMap.get(intMapKey); 
     if (integerList != null && !integerList.isEmpty()) { 
      integerList.add(value); 
     } 
     else { 
      integerList = new ArrayList<Integer>(); 
      integerList.add(value); 
      stringListHashMap.put(intMapKey, integerList); 
     } 
    } 
} 

public static void main(String args[]) { 
    addIntegerToKmap("A", "A1", 1); 
    addIntegerToKmap("A", "A1", 2); 

    addIntegerToKmap("A", "A2", 12); 
    addIntegerToKmap("A", "A2", 22); 

    addIntegerToKmap("B", "B1", 1); 

    addIntegerToKmap("A", "A1", 3); 
} 

}

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