В Java, как получить значения HashMap
, возвращаемые как List
?
Как преобразовать HashMap в список в Java?
Ответ 1
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put (1, "Mark");
map.put (2, "Tarryn");
List<String> list = new ArrayList<String>(map.values());
for (String s : list) {
System.out.println(s);
}
Ответ 2
Предполагая, что у вас есть:
HashMap<Key, Value> map; // Assigned or populated somehow.
Список значений:
List<Value> values = new ArrayList<Value>(map.values());
Список ключей:
List<Key> keys = new ArrayList<Key>(map.keySet());
Обратите внимание, что порядок ключей и значений будет ненадежным с помощью HashMap; используйте LinkedHashMap, если вам нужно сохранить взаимно однозначное соответствие позиций ключа и значения в своих соответствующих списках.
Ответ 3
В принципе, вы не должны путать вопрос с ответом, потому что это запутывает.
Затем вы можете указать, что означает преобразование, и выбрать одно из этих решений
List<Integer> keyList = Collections.list(Collections.enumeration(map.keySet()));
List<String> valueList = Collections.list(Collections.enumeration(map.values()));
Ответ 4
Интерфейс коллекции имеет 3 вида
- Keyset
- значения
- entrySet
Другие ответили, чтобы преобразовать Hashmap в два списка ключей и значений. Его совершенно правильный
Мое дополнение: Как преобразовать пару "ключ-значение" (aka entrySet) в список.
Map m=new HashMap();
m.put(3, "dev2");
m.put(4, "dev3");
List<Entry> entryList = new ArrayList<Entry>(m.entrySet());
for (Entry s : entryList) {
System.out.println(s);
}
ArrayList имеет этот конструктор.
Ответ 5
Решение с использованием Java 8 и Stream Api:
private static <K, V> List<V> createListFromMapEntries (Map<K, V> map){
return map.values().stream().collect(Collectors.toList());
}
Использование:
public static void main (String[] args)
{
Map<Integer, String> map = new HashMap<>();
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
List<String> result = createListFromMapEntries(map);
result.forEach(System.out :: println);
}
Ответ 6
Если вы хотите, чтобы он перебирал ваш HashMap, нет необходимости в списке:
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put (1, "Mark");
map.put (2, "Tarryn");
for (String s : map.values()) {
System.out.println(s);
}
Конечно, если вы хотите изменить свою структуру структурно (т.е. больше, чем изменять значение для существующего ключа) во время итерации, то вам лучше использовать метод "copy to ArrayList", поскольку в противном случае вы получите исключение ConcurrentModificationException, Или экспортировать как массив:
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put (1, "Mark");
map.put (2, "Tarryn");
for (String s : map.values().toArray(new String[]{})) {
System.out.println(s);
}
Ответ 7
Если вы хотите сохранить тот же порядок в своем списке, скажите: ваша карта выглядит следующим образом:
map.put(1, "msg1")
map.put(2, "msg2")
map.put(3, "msg3")
и вы хотите, чтобы ваш список выглядел как
["msg1", "msg2", "msg3"] // same order as the map
вам придется выполнять итерацию по карте:
// sort your map based on key, otherwise you will get IndexOutofBoundException
Map<String, String> treeMap = new TreeMap<String, String>(map)
List<String> list = new List<String>();
for (treeMap.Entry<Integer, String> entry : treeMap.entrySet()) {
list.add(entry.getKey(), entry.getValue());
}