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

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

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

虽然List的值可以通过Map.values方法返回的Collection创build一个新的ArrayList

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

获取密钥List的结果:

苹果
另一个
你好

获取值List的结果:

 3.14
元件
世界

什么清单?

假设map是你的Map实例

  • map.values()将返回包含所有地图值的Collection
  • map.keySet()将返回一个包含所有映射关键字的Set

使用Java 8 Streams API。

 List<Value> values = map.values().stream().collect(Collectors.toList()); 

map.entrySet()给你一个包含key和value的Map.Entry对象的集合。 你可以把它转换成你喜欢的任何集合对象,比如new ArrayList(map.entrySet()) ;

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

请注意,这个Collection是由Map对象支持的, Map对象的任何改变都会在这里反映出来。 所以,如果你想要一个单独的拷贝没有绑定到你的Map对象,只需创build一个新的List对象,像一个ArrayList传递值Collection ,如下所示。

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

你可以这样做

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

如果要确保结果List<Value>中的List<Value>处于inputMap<Key, Value>的键顺序中,则需要以某种方式“经由” SortedMap

可以具体的SortedMap实现(比如TreeMap )开始,也可以在将inputMap转换为List之前将其input到SortedMap 。 例如:

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

否则,你会得到任何本地订购的Map实现提供的,通常可以是自然键sorting(尝试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获取键和值。

map.EntrySet的“陷阱”是这个接口没有实现Serializable。 在MyFaces中,如果您尝试遍历集合来显示数据,我们会得到exception。

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