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

Каков наилучший способ преобразования Map<key,value> в List<value>? Просто перебирайте все значения и вставляйте их в список или я что-то пропускаю?

Ответ 1

List<Value> list = new ArrayList<Value>(map.values());

при условии:

Map<Key,Value> map;

Ответ 2

Проблема здесь в том, что Map имеет два значения (ключ и значение), а List имеет только одно значение (элемент).

Поэтому самое лучшее, что можно сделать, это либо получить List ключей, либо значений. (Если мы не сделаем обертку для хранения пары ключ/значение).

Скажем, у нас есть Map:

Map<String, String> m = new HashMap<String, String>();
m.put("Hello", "World");
m.put("Apple", "3.14");
m.put("Another", "Element");

Ключи в виде List можно получить, создав новый ArrayList из Set, возвращенный методом Map.keySet:

List<String> list = new ArrayList<String>(m.keySet());

Пока можно получить значения как List, создавая новый ArrayList из Collection, возвращаемый Map.values метод:

List<String> list = new ArrayList<String>(m.values());

Результат получения List ключей:

Apple
Another
Hello

Результат получения List значений:

3.14
Element
World

Ответ 3

Использование Java 8 Streams API.

List<Value> values = map.values().stream().collect(Collectors.toList());

Ответ 4

map.entrySet() предоставляет вам набор объектов Map.Entry, содержащих как ключ, так и значение. вы можете преобразовать его в любой объект коллекции, который вам нравится, например new ArrayList(map.entrySet());

Ответ 5

список того, что?

Предполагая, что map является вашим экземпляром map

  • map.values() вернет Collection, содержащий все значения карты.
  • map.keySet() вернет Set, содержащий все ключи карты.

Ответ 6

Я думаю, вы хотите преобразовать значения, содержащиеся в Map, в list? Самый простой способ - вызвать метод values() интерфейса Map. Это вернет Collection объектов значения, содержащихся в Map.

Обратите внимание, что этот Collection поддерживается объектом Map, и здесь будут отражены любые изменения объекта Map. Поэтому, если вы хотите, чтобы отдельная копия не привязалась к вашему объекту Map, просто создайте новый объект list, такой как ArrayList, передав значение Collection, как показано ниже.

ArrayList<String> list = new ArrayList<String>(map.values());

Ответ 7

Вы можете сделать это так:

List<Value> list = new ArrayList<Value>(map.values());

Ответ 8

Если вы хотите, чтобы значения в результирующем List<Value> находились в порядке ввода ключа Map<Key, Value>, вам нужно как-то "пройти через" SortedMap.

Либо начните с конкретной реализации SortedMap (например, TreeMap), либо вставьте свой ввод Map в SortedMap, прежде чем преобразовать его в List. например:.

Map<Key,Value> map;
List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map ));

В противном случае вы получите любой собственный порядок реализации Map, который часто может быть чем-то иным, чем упорядочение естественного ключа (Try Hashtable или ConcurrentHashMap, для разнообразия).

Ответ 9

    Map<String, Integer> map = new HashMap<String, Integer>();
    map.put("java", 20);
    map.put("C++", 45);

    Set <Entry<String, Integer>> set = map.entrySet();

    List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(set);

мы можем иметь пару ключей и значений в списке. Также вы можете получить ключ и значение, используя Map.Entry, итерируя по списку.

Ответ 10

"Ловушка" с map.EntrySet заключается в том, что этот интерфейс не реализует Serializable. В MyFaces у нас есть исключение, если вы пытаетесь перебрать коллекцию для отображения данных.

Ответ 11

Comparator<String> comparator = new Comparator<String>() {

    @Override
    public int compare(String s1, String s2) {
        if (s1 == s2) {
            return 0;
        }

        if (s1 == null) {
            return -1;
        }

        if (s2 == null) {
            return 1;
        }

        return s1.compareToIgnoreCase(s2);
    }
};

Ответ 12

"Map<String , String > map = new HapshMap<String , String>;
 map.add("one","java");
 map.add("two" ,"spring");
 Set<Entry<String,String>> set =  map.entrySet();
 List<Entry<String , String>> list = new ArrayList<Entry<String , String>>    (set);
 for(Entry<String , String> entry : list ) {
   System.out.println(entry.getKey());
   System.out.println(entry.getValue());
 } "

Ответ 13

HashMap<Integer, List<String>> map = new HashMap<>(); 
List<String> list = new ArrayList<String>();
list.add("Java");
list.add("Primefaces");
list.add("JSF");
map.put(1,list);
if(map != null){
    return new ArrayList<String>((Collection<? extends String>) map.values());
}

Ответ 14

// you can use this
List<Value> list = new ArrayList<Value>(map.values());

// or you may use 
List<Value> list = new ArrayList<Value>();
for (Map.Entry<String, String> entry : map.entrySet())
{
list.add(entry.getValue());    
}

Ответ 15

Здесь универсальный метод для получения значений из карты.

public static <T> List<T> ValueListFromMap(HashMap<String, T> map) {
    List<T> thingList = new ArrayList<>();

    for (Map.Entry<String, T> entry : map.entrySet()) {
        thingList.add(entry.getValue());
    }

    return thingList;
}