如何在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(尝试Hashtable
或ConcurrentHashMap
,各种)以外的东西。
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); } };