将Map<key,value>
转换为List<value>
的最佳方法是什么?只是迭代所有值并将它们插入列表中或者我忽略了什么?
答案 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)
列出什么?
假设map
是Map
map.values()
将返回包含所有地图值的Collection
。map.keySet()
将返回包含所有地图密钥的Set
。答案 5 :(得分:12)
我想您想将Map
中包含的值转换为list
?最简单的方法是调用values()
接口的Map
方法。这将返回Collection
中包含的Map
值对象。
请注意,此Collection
由Map
对象支持,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())