цикл Java и добавление значений на карту

#java #list #map #hashmap

#java #Список #словарь #hashmap

Вопрос:

Новичок в использовании map и задавался вопросом, как добавлять значения и выполнять цикл через него для извлечения значений. Ниже мой код:

 Map<String, List<String>> map = new LinkedHashMap<String, List<String>>();

for ( int i = 0, m = 1; i < visualcategory.size(); i = i 2, m = m 2) {
    String categoryName = visualcategory.get(m);
    map.put(categoryName , null);
}
  

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

 MAP {5=null, 11=null, 15=null, 24=null, 96=null, 98=null}
  

В настоящее время он равен нулю, поскольку следующий процесс (ниже) заполнит этот список по мере выполнения условия for, если только это не может быть сделано для добавления CategoryName и значений списка одновременно?

Теперь мне нужно выполнить цикл и добавить список из каждой строки / карты

 String value1 = value;
String value2 = value;

for (Entry<String, List<String>> entry : map.entrySet()) {
    map.put(value1, entry.getValue());  --> doesn't work
    map.put(value2, entry.getValue());  --> doesn't work
}
  

Мне нужно что-то вроде этого

 MAP {5=[value1,value2,etc], 11=[value1,value2,etc], .......
  

Проблема в том, что это не работает, я, похоже, не могу добавить внутри списка. Мне нужна помощь в том, как добавить значения с карты > и выполнить цикл до нее?

Комментарии:

1. Карта содержит null значения as и не содержит списка, почему бы не начать с этого?

2. Вы хотите добавить значения карты в список?

3. Можете ли вы изменить MAP {5=null, 11=null, 15=null, 24=null, 96=null, 98=null} значения вашего примера вместо null ? Это очень запутанно .. поскольку вы ожидаете MAP {5=[value1,value2,etc], 11=[value1,value2,etc], ....... , а не нулевые значения..

4. В настоящее время он равен нулю, поскольку следующий процесс (ниже) заполнит этот список по мере выполнения условия for, если только это не может быть сделано для добавления CategoryName и значений списка одновременно?

5. Взгляните на Multimap от Guava.

Ответ №1:

Это то, что вам нужно:

 anotherMap.forEach((k, v) -> myMap.put(k.toString(), v.toString()));
  

Источник: Цикл по карте в Java

Ответ №2:

Используйте итератор вместо entrySet

     Map<String, List<String>> map = new LinkedHashMap<String, List<String>>();
    Iterator itr=map.keySet().iterator();
    while (itr.hasNext()) {
        String key =  itr.next().toString();
        String value=map.get(key).toString();
        System.out.println(key "=" value);
    }
  

Ответ №3:

Когда вы создаете свою карту, вместо того, чтобы заполнять ее null s, заполните ее пустыми List s:

 Map<String, List<String>> map = new LinkedHashMap<String, List<String>>();

for ( int i = 0, m = 1; i < visualcategory.size(); i = i 2, m = m 2) {
    String categoryName = visualcategory.get(m);
    map.put(categoryName , new ArrayList<String>());
}
  

Теперь, когда вы готовы заполнить значения, вы можете сделать:

 String value1 = value;
String value2 = value;

for (List<String> list : map.values()) {
    list.add(value1);
    list.add(value2);
}
  

Если у вас есть значения при создании карты, вы упрощаете ее:

 String value1 = value;
String value2 = value;

Map<String, List<String>> map = new LinkedHashMap<String, List<String>>();

for ( int i = 0, m = 1; i < visualcategory.size(); i = i 2, m = m 2) {
    String categoryName = visualcategory.get(m);
    List<String> values = new ArrayList<String>();
    values.add(value1);
    values.add(value2);
    map.put(categoryName, values);
}