Answers:
List<Value> list = new ArrayList<Value>(map.values());
假设:
Map<Key,Value> map;
Collection
到List
会的工作。
keySet()
和返回的集合values()
通常是填充对象,它们给出基础结构的Set或Collection视图(keySet()
返回Set以强调不重复)。对于values()
,返回的对象可能是List
,但通常不是。如您所说,创建一个真实的列表会断开链接,这意味着您不再依赖原始地图。但是有时,您只需要一个列表,因为某些API需要一个列表-加强了一个好的API应该只需要它可以摆脱的最抽象的接口的规则……
这里的问题是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
可以通过ArrayList
从方法Set
返回的值中创建一个新键来获取键Map.keySet
:
List<String> list = new ArrayList<String>(m.keySet());
而作为该值List
能够获得创建新的ArrayList
从Collection
由返回的Map.values
方法:
List<String> list = new ArrayList<String>(m.values());
获取List
密钥的结果:
苹果 另一个 你好
获取List
值的结果:
3.14 元件 世界
HashMap
类似的未排序Map
实现,它实际上是随机的。
使用Java 8 Streams API。
List<Value> values = map.values().stream().collect(Collectors.toList());
你可以这样
List<Value> list = new ArrayList<Value>(map.values());
如果要确保结果中的值在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
实现所提供的任何本机排序,通常可以是自然键排序以外的其他内容(尝试Hashtable
或ConcurrentHashMap
,品种)。
"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());
}