Подтвердить что ты не робот

Как преобразовать HashMap в список в Java?

В Java, как получить значения HashMap, возвращаемые как List?

4b9b3361

Ответ 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());
}