#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);
}