[英]How does one convert a HashMap to a List in Java?
在 Java 中,如何獲取作為List
返回的HashMap
的值?
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put (1, "Mark");
map.put (2, "Tarryn");
List<String> list = new ArrayList<String>(map.values());
for (String s : list) {
System.out.println(s);
}
假設你有:
HashMap<Key, Value> map; // Assigned or populated somehow.
對於值列表:
List<Value> values = new ArrayList<Value>(map.values());
有關鍵列表:
List<Key> keys = new ArrayList<Key>(map.keySet());
請注意,使用HashMap時,鍵和值的順序將不可靠; 如果需要保持各自列表中鍵和值位置的一對一對應關系,請使用LinkedHashMap 。
基本上你不應該把問題弄得一塌糊塗,因為它令人困惑。
然后你可以指定轉換平均值並選擇其中一個解決方案
List<Integer> keyList = Collections.list(Collections.enumeration(map.keySet()));
List<String> valueList = Collections.list(Collections.enumeration(map.values()));
Collection Interface有3個視圖
其他人已回答將Hashmap轉換為兩個鍵和值列表。 它非常正確
我的補充:如何將“鍵值對”(aka entrySet)轉換為列表。
Map m=new HashMap();
m.put(3, "dev2");
m.put(4, "dev3");
List<Entry> entryList = new ArrayList<Entry>(m.entrySet());
for (Entry s : entryList) {
System.out.println(s);
}
ArrayList有這個構造函數。
使用Java 8和Stream Api的解決方案:
private static <K, V> List<V> createListFromMapEntries (Map<K, V> map){
return map.values().stream().collect(Collectors.toList());
}
用法:
public static void main (String[] args)
{
Map<Integer, String> map = new HashMap<>();
map.put(1, "one");
map.put(2, "two");
map.put(3, "three");
List<String> result = createListFromMapEntries(map);
result.forEach(System.out :: println);
}
如果您想在列表中保持相同的順序,請說:您的地圖如下所示:
map.put(1, "msg1")
map.put(2, "msg2")
map.put(3, "msg3")
你希望你的列表看起來像
["msg1", "msg2", "msg3"] // same order as the map
你將不得不迭代地圖:
// sort your map based on key, otherwise you will get IndexOutofBoundException
Map<String, String> treeMap = new TreeMap<String, String>(map)
List<String> list = new List<String>();
for (treeMap.Entry<Integer, String> entry : treeMap.entrySet()) {
list.add(entry.getKey(), entry.getValue());
}
如果您只希望它迭代您的HashMap,則不需要列表:
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put (1, "Mark");
map.put (2, "Tarryn");
for (String s : map.values()) {
System.out.println(s);
}
當然,如果你想在迭代時在結構上修改你的地圖(即不僅僅是改變現有鍵的值),那么你最好使用“copy to ArrayList”方法,否則你將得到一個ConcurrentModificationException。 或導出為數組:
HashMap<Integer, String> map = new HashMap<Integer, String>();
map.put (1, "Mark");
map.put (2, "Tarryn");
for (String s : map.values().toArray(new String[]{})) {
System.out.println(s);
}
我通常使用map.values()
來獲取值,然后將它們轉換為列表
假設你有這個 Hashmap:
HashMap<String, Integer> map = new HashMap<>();
map.put("one", 1);
map.put("two", 2);
map.put("three", 3);
您可以從 map 中獲取值,然后將它們轉換為一個代碼行中的列表,如下所示:
List<Integer> values = map.values().stream()
.collect(Collectors.toList());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.