5

如何将 a 转换Map<K, V>为 lists List<K> keys,List<V> values以便 inkeysvaluesmatch 的顺序?我只能找到Set<K> Map#keySet()并且Collection<V> Map#values()可以使用以下方法转换为列表:

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

但我担心顺序会是随机的。

我必须手动转换它们是正确的还是某处有快捷方式?

更新:由于答案,我能够找到我想与您分享的其他有用信息,随机谷歌用户: 如何有效地迭代地图中的每个条目?

4

4 回答 4

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());
}
于 2013-04-08T14:15:57.773 回答
1

您应该提取您提到的键列表,然后遍历它们并提取值:

List<String keys = new ArrayList<String>(map.keySet());
List<String> values = new ArrayList<String>();
for(String key: keys) {
    values.add(map.get(key));
}
于 2013-04-08T14:14:40.813 回答
1

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

于 2013-04-08T14:15:36.680 回答
1

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

如果您需要 Map 的迭代顺序与插入顺序相同,请查看LinkedHashMap

于 2013-04-08T14:19:34.757 回答