How to convert a Map to List in Java?
将Map转换为List的最佳方法是什么?只需遍历所有值并将它们插入到列表中,或者我忽略了一些内容?
- 我认为,如果必须将地图转换成列表,这不是一个好的模型。应该以这种情况不会出现的方式编写代码。
1
| List<Value> list = new ArrayList<Value>(map.values()); |
假设:
ZZU1
- 谢谢!我假设从Collection到List的演员阵容是可行的。
- 我怀疑它不起作用的原因是,values()返回的集合依赖于底层映射;相反,通过进行复制构造函数调用,可以分配存储并将值复制到该存储中,从而断开连接…
- 如果我们有Linkedhashmap,订单会保持不变吗?
- @用户2022068是的,订单应与LinkedHashMap一起保存。
- @ SheldonR。是-由keySet()和values()返回的集合通常是填充对象,这些对象提供底层结构的集合或集合视图(keySet()返回一个集合以强调不重复)。对于values(),返回的对象可能是List,但通常不会。如您所说,创建一个真正的列表会破坏链接,这意味着您不再依赖于原始地图。但有时,您只需要一个列表,因为有些API需要一个列表—这加强了一个规则,即一个好的API只需要它能摆脱的最抽象的接口…
- 很好,让我们在arraylist构造函数中使用diamond操作符:listlist=new arraylist<>(map.value s());
这里的问题是有两个价值(一个关键和价值),而只有一个价值(一个要素)。
因此,可以做的最好的事情是给她一个EDOCX1[…]的关键或价值。(Unless we make a wrapper to hold on the key/value pair).
说我们有一个map
1 2 3 4
| Map <String, String > m = new HashMap <String, String >();
m. put("Hello", "World");
m. put("Apple", "3.14");
m. put("Another", "Element"); |
The keys as a Listcan be obtained by creating a new ArrayListfrom a Setreturned by the Map.keySetmethod:
1
| List<String> list = new ArrayList<String>(m.keySet()); |
While the values as a Listcan be obtained creating a new ArrayListfrom a Collectionreturned by the Map.valuesmethod:
1
| List<String> list = new ArrayList<String>(m.values()); |
The result of getting the Listof keys:
The result of getting the Listof values:
- 应该注意的是,这些方法返回的值的顺序没有定义,对于HashMap和类似的未排序Map实现,它实际上是随机的。
- 是的,你必须知道它是一个Linkedhashmap或者类似的东西。原始问题的问题在于,这个问题是错误的,也就是说,它需要编辑。问题不在于将映射转换为列表,而在于如何将映射的值作为列表获取。方法值为您提供了一个集合,而不是列表,因此需要一个整洁的小技巧。
- 我认为你可以在回答中加上@m0les所说的:你需要以某种方式"通过"sortedmap。要么从具体的sortedmap实现(如treemap)开始,要么在将输入映射转换为列表之前将其插入sortedmap中。
使用爪哇8大街API。
1
| List<Value> values = map.values().stream().collect(Collectors.toList()); |
- 我更喜欢公认的、基于构造函数的答案。流应该用于简化代码。
- @Aaron是的,对于从map中获取值列表的任务,构造函数似乎更简单。但是,如果您在代码库中使用流扩展,那么最好保持一致。
给你一个EDOCX1的收藏然后你可以把这个变成任何你喜欢的对象,如new ArrayList(map.entrySet());
什么清单?
假设你的程序是map
- 3.Will return a Collectioncontaining all of the map's values.
- 将把所有地图的钥匙都归还给EDOCX1&5。
我猜你想把map中包含的价值转换成List中的值。简单的是叫values()方法的界面。这将回到Collection中包含的价值对象。
注:此Collection是由map反馈到map的对象和任何变化将在这里反射。所以,如果你想要一个分隔的拷贝,而不是你的mapObject,simply create a new ListObject like an ArrayListpassing the value Collectionas below.
1
| ArrayList<String> list = new ArrayList<String>(map.values()); |
你可以这样做
1
| List<Value> list = new ArrayList<Value>(map.values()); |
- 询问如何转换为list。当提供答案时,最好在建议的解决方案中包含一个良好的描述。此问题已被接受,已被回答。
如果你想确保List的结果的价值是在Map的输入的关键顺序中,你需要"通过SortedMap去"。
在转换到List之前,以混凝土SortedMap开始执行(如TreeMap或插入map进入SortedMap。E.G.:
1 2
| Map <Key,Value > map ;
List <Value > list = new ArrayList <Value >( new TreeMap <Key Value >( map )); |
除此之外,你还将得到与自然钥匙指令(尝试EDOCX1〕或ConcurrentHashMap相反的东西。
1 2 3 4 5 6 7
| 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 ); |
我们可以在列表中都有密钥和增值对,也可以用地图来获得密钥和增值。通过列表中的列表来输入。
1 2 3 4 5 6 7 8 9
| // 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());
} |
这是获取地图价值的一般方法。
1 2 3 4 5 6 7 8 9
| 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 ;
} |
1 2 3 4 5 6 7 8 9
| 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());
} |
1 2 3 4 5 6 7 8 9
| "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());
}" |