如何嵌套地圖轉換到一個列表:如何嵌套地圖轉換到一個列表<Object>
的地圖是:
Map<Integer, Map<Integer, Map<String, Double>>> list
Object類是:
public class employee {
private Integer id;
private Integer number;
private String name;
private Double salary;
如何將嵌套的地圖轉換爲列表?
如何嵌套地圖轉換到一個列表:如何嵌套地圖轉換到一個列表<Object>
的地圖是:
Map<Integer, Map<Integer, Map<String, Double>>> list
Object類是:
public class employee {
private Integer id;
private Integer number;
private String name;
private Double salary;
如何將嵌套的地圖轉換爲列表?
迭代映射條目。對於每個內部映射,還遍歷其條目等。對於最內層映射中的每個條目,創建一個Employee
並將其添加到列表中。
迭代映射的標準方法是遍歷其條目集。 vefthym的答案告訴你如何用for
循環做到這一點。您可以將該代碼闡述爲您需要的內容。
如果你可以使用Java 8,你也可以用流來完成。我假設你的外層地圖從ID映射到中間地圖(我期望中間地圖只能容納一個入口;但是我的代碼將會也可以更多或更少)。下一個地圖從數字映射到從名稱到薪水的地圖。
List<Employee> empls = list.entrySet()
.stream()
.flatMap(oe -> oe.getValue()
.entrySet()
.stream()
.flatMap((Map.Entry<Integer, Map<String, Double>> me) -> me.getValue()
.entrySet()
.stream()
.map((Map.Entry<String, Double> ie)
-> new Employee(oe.getKey(), me.getKey(), ie.getKey(), ie.getValue()))))
.collect(Collectors.toList());
這本來是爲oe
外進入,也就是,在外部映射條目。內部條目類似地爲me
,中間條目爲ie
。我已經將您的類重命名爲首字母大寫E
,以遵循Java命名約定,並且我假設了一個方便的構造函數。
編輯:vefthym,你的答案現在在哪裏,我指的是它?我知道你自己並不高興,這很公平。
for (Map.Entry<Integer, String> currentEntry : yourMap.entrySet()) {
// do your stuff here
// use currentEntry.getKey() and currentEntry.getValue() to get the key and value from the current entry
}
您需要從地圖聲明中重複的類型參數的<>
Map.Entry
後:在任何情況下,與for
循環是標準的方式來遍歷地圖。
您的回答正好解決了我的問題,非常感謝! – QSY
List?什麼名單? –
什麼名單?什麼號碼?地圖包含什麼?關鍵是什麼?價值是什麼? – vefthym
好主意!從一個我不知道如何發生的地圖結構轉換爲大多數目的,很難用於一個很好的面向對象的設計。 –