如何在Java中将Map转换为List?

时间:2009-06-22 11:45:28

标签: java list collections map

Map<key,value>转换为List<value>的最佳方法是什么?只是迭代所有值并将它们插入列表中或者我忽略了什么?

14 个答案:

答案 0 :(得分:1216)

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

假设:

Map<Key,Value> map;

答案 1 :(得分:128)

这里的问题是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");

可以通过ArrayList方法返回的Set创建新的Map.keySet来获取List的密钥:

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

虽然可以从Collection方法返回的Map.values创建新的List,但可以获得ArrayList的值:

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

获取密钥List的结果:

Apple
Another
Hello

获取List值的结果:

3.14
Element
World

答案 2 :(得分:31)

使用Java 8 Streams API。

Member 'System.Void System.Console::WriteLine(System.String)' is declared in another module and needs to be imported

答案 3 :(得分:22)

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

答案 4 :(得分:21)

列出什么?

假设mapMap

的实例
  • map.values()将返回包含所有地图值的Collection
  • map.keySet()将返回包含所有地图密钥的Set

答案 5 :(得分:12)

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

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

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

答案 6 :(得分:6)

你可以这样做

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

答案 7 :(得分:4)

如果您想确保结果List<Value>中的值在输入Map<Key, Value>的键排序中,您需要&#34;通过&#34;不知怎的SortedMap

使用具体SortedMap实施开始(例如TreeMap)或将输入Map插入SortedMap,然后再转换为List Map<Key,Value> map; List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map )); 。 e.g:

Map

否则,您将获得Hashtable实施提供的任何原生订单,这通常不是自然键排序(尝试ConcurrentHashMap或{{1}})

答案 8 :(得分:3)

    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获取键和值。

答案 9 :(得分:1)

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

答案 10 :(得分:0)

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

答案 11 :(得分:0)

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

答案 12 :(得分:0)

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

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

答案 13 :(得分:0)

如果你想要一个不可变值的副本:

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