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

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

13 ответов


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

предположим:

Map<Key,Value> map;

проблема здесь в том, что 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 от a 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

использование API потоков Java 8.

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

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


список чего ?

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

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

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

обратите внимание, что это Collection при поддержке


вы можете сделать это

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

если вы хотите обеспечить значения в результирующем 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, для разнообразия).


    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<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());
 } "

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

// 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());    
}

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

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