Как преобразовать карту в список в Java?
-
06-07-2019 - |
Вопрос
Как лучше всего конвертировать Map<key,value>
к List<value>
?Просто переберите все значения и вставьте их в список, или я что-то упускаю из виду?
Решение
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
из 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 Streams.
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()
интерфейса Collection
. Это вернет List
объектов значения, содержащихся в ArrayList
.
Обратите внимание, что этот <=> поддерживается объектом <=>, и любые изменения в объекте <=> будут отражены здесь. Поэтому, если вы хотите, чтобы отдельная копия не была привязана к вашему <=> объекту, просто создайте новый объект <=>, например <=>, передав значение <=>, как показано ниже.
ArrayList<String> list = new ArrayList<String>(map.values());
Вы можете сделать это так
List<Value> list = new ArrayList<Value>(map.values());
Если вы хотите убедиться, что значения в результирующем List<Value>
порядке в ключах ввода Map<Key, Value>
, вам нужно " пройти через " SortedMap
как-то.
Либо начните с конкретной реализации TreeMap
(например, Map
), либо вставьте ввод List
в Hashtable
, прежде чем преобразовать его в ConcurrentHashMap
. например:.
Map<Key,Value> map;
List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map ));
В противном случае вы получите тот собственный порядок, который обеспечивает реализация <=>, который часто может отличаться от порядка естественного ключа (попробуйте <=> или <=>, для разнообразия).
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, перебирая список.
// 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());
}
"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());
} "
Вот общий метод для получения значений из карты.
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;
}
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());
}