如何在保持顺序的同时将Map <k,v =“”>转换为两个列表?</k,>

时间:2013-04-08 14:13:13

标签: java

如何将Map<K, V>转换为List<K> keysList<V> values列表,以使keysvalues中的订单匹配?我只能找到Set<K> Map#keySet()Collection<V> Map#values()我可以使用以下内容转换为列表:

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

但我担心订单是随机的。

我必须手动转换它们还是某个地方有快捷方式?

更新:由于答案,我能够找到我想与您分享的其他有用信息,随机谷歌用户: How to efficiently iterate over each Entry in a Map?

4 个答案:

答案 0 :(得分:10)

使用Map.entrySet():

List<String> keys = new ArrayList<>(map.size());
List<String> values = new ArrayList<>(map.size());
for(Map.Entry<String, String> entry: map.entrySet()) {
   keys.add(entry.getKey());
   values.add(entry.getValue());
}

答案 1 :(得分:1)

您应该按照提到的方式提取密钥列表,然后迭代它们并提取值:

List<String keys = new ArrayList<String>(map.keySet());
List<String> values = new ArrayList<String>();
for(String key: keys) {
    values.add(map.get(key));
}

答案 2 :(得分:1)

您可以迭代map.entrySet(),将键和值附加到两个列表中。

答案 3 :(得分:1)

请注意,地图不是订购的收藏品。迭代顺序不固定。因此,当您在地图中添加更多条目时,它们将出现在迭代中的随机点,因此将不再匹配您创建的任何列表。

如果您需要Map的迭代顺序与插入顺序相同而不是查看LinkedHashMap