Java - 将LinkedHashMap的键/值放入各自的列表的简单方法?

20

我有一个 LinkedHashMap<String, String> map

List < String > keyList;
List < String > valueList;

map.keySet();
map.values();
有没有一种简单的方法可以从 map.keySet() 填充 keyList,并从 map.values() 填充 valueList,或者我必须进行迭代?
3个回答

47

大多数集合都接受Collection作为构造函数参数:

List<String> keyList = new ArrayList<String>(map.keySet());
List<String> valueList = new ArrayList<String>(map.values());

2
LinkedHashMap和List都有顺序,因此我期望所需的结果是列表与映射具有相同的顺序。但是,您使用Set作为中间类型(map.keySet()的返回值),它没有顺序。因此,不能保证keyList具有与map相同的顺序(请注意,虽然map.values()返回一个Collection而不是Set,因此它没有问题)。[由于我误解了文档,因此删除了更多关于values()的内容] - Jasper
3
我对map.keySet()感到好奇,于是查看了代码。对于LinkedHashMap而言,它返回的是LinkedHashMap$LinkedKeySet,这个集合有可预测的顺序(与原始的LinkedHashMap相同),就像map.values()一样。因此,上述代码将按预期运行,并且你最终会得到两个列表,其中keyList[n] ==> valueList[n]。 - Luke

7

0
使用Java 8的不同方法 -
List<String> valueList = map.values().stream().collect(Collectors.toList()); 
List<String> keyList = map.keySet().stream().collect(Collectors.toList());  

注释:

  • stream() - 返回将集合(这里是map)视为源的Object序列。

  • Collectors - Collectors用于组合流元素处理结果。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接