如何将地图转换为Java中的列表?

如何将Map<key,value>转换为List<value>?我应该迭代所有映射值并将它们插入列表中吗?

945963 次浏览
List<Value> list = new ArrayList<Value>(map.values());

假设:

Map<Key,Value> map;

什么的清单?

假设mapMap的实例

  • map.values()将返回一个包含所有map值的Collection
  • map.keySet()将返回一个包含所有map键的Set

这里的问题是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的键可以通过从Map.keySet方法返回的Set创建一个新的ArrayList来获得:

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

虽然作为List的值可以从Map.values方法返回的Collection创建一个新的ArrayList

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

获取密钥List的结果:

AppleAnotherHello

获取值的List的结果:

3.14ElementWorld

我猜你想将Map中包含的值转换为list?最简单的方法是调用Map接口的values()方法。这将返回Map中包含的值对象的Collection

请注意,这个CollectionMap对象支持,对Map对象的任何更改都将反映在这里。因此,如果您想要一个不绑定到Map对象的单独副本,只需创建一个新的List对象,就像ArrayList传递值Collection一样,如下所示。

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

map.entrySet()为您提供一个包含键和值的Map.Entry对象的集合。然后您可以将其转换为您喜欢的任何集合对象,例如new ArrayList(map.entrySet())

如果您想确保结果List<Value>中的值符合输入Map<Key, Value>的键顺序,您需要以某种方式“go via”SortedMap

开始带有具体的SortedMap实现(例如TreeMap),或者在将输入Map转换为List之前将其插入SortedMap。例如:

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

否则,您将获得Map实现提供的任何本机排序,这通常可以是自然键排序以外的东西(尝试HashtableConcurrentHashMap,以获得多样性)。

    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通过迭代列表来获取键和值。

你可以像这样做

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

使用Java8 Streams API。

List<Value> values = map.values().stream().collect(Collectors.toList());
 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());}

这是从map获取值的通用方法。

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;}
// you can use thisList<Value> list = new ArrayList<Value>(map.values());
// or you may useList<Value> list = new ArrayList<Value>();for (Map.Entry<String, String> entry : map.entrySet()){list.add(entry.getValue());}

如果您想要值的不可变副本:

List<Value> list = List.copyOf(map.values())