繁体   English   中英

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

[英]How do I convert a Map to List in Java?

如何将Map<key,value>转换为List<value> 我应该遍历所有 map 值并将它们插入到列表中吗?

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

可以通过从Map.keySet方法返回的Set创建一个新的ArrayList来获取作为List的键:

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

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

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

获取键List的结果:

Apple
Another
Hello

获取值List的结果:

3.14
Element
World

使用 Java 8 流 API。

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 最简单的方法是调用Map接口的values()方法。 这将返回Map中包含的值对象的Collection

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

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

你可以这样做

List<Value> list = new ArrayList<Value>(map.values());
    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>中的值在输入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实现提供的任何本机排序,这通常可能不是自然键排序(尝试HashtableConcurrentHashMap ,以获得多样性)。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM