簡體   English   中英

如何將 HashMap 轉換為 Java 中的列表?

[英]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個視圖

  • 中的keySet
  • 的entrySet

其他人已回答將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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM