Каков наилучший способ преобразования Map<key,value>
в List<value>
? Просто перебирайте все значения и вставляйте их в список или я что-то пропускаю?
Как преобразовать карту в список на Java?
Ответ 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;
}