2015-06-25 59 views
-4

我試圖在Java中迭代List<Map<String, String>>。但是,我無法正確地迭代它。任何人都可以引導我嗎?遍歷Java中的List <Map <String,String >>

Iterator it = list.iterator(); 
while (it.hasNext()) { 
    Map.Entry pairs = (Map.Entry) it.next(); 
    System.out.println(pairs.getKey() + " = " + pairs.getValue()); 
} 

感謝,

+4

ATLEAST顯示你嘗試過什麼到目前爲止,任何異常,錯誤 –

+0

什麼錯誤你得到 – xrcwrn

+0

如果列表是一個List <地圖>那麼它應該是一個編譯錯誤...... – Burkhard

回答

0

列表沒有entySet()方法!

試試這個:

final Iterator<Map<String, String>> it = list.iterator(); 
    while (it.hasNext()) 
    { 
     Map<String, String> mapElement = it.next(); 
     // do what you want with the mapElement 
    } 

當然,你需要另一個循環遍歷在地圖的元素。

+0

這是錯誤的。 'it.next()'返回一個'Map ',所以將它轉換爲'Map.Entry'將在運行時失敗。 (編譯器只允許它,因爲'Map'是一個接口,一個_could_定義了'Map.Entry '的子類,它實現了'Map'。) – ajb

+0

@ajb:true。只是一個複製粘貼錯誤:) – Burkhard

3
public static void main(String[] args) { 
     List<Map<String, String>> myListOfMaps = new ArrayList<Map<String, String>>(); 
     Map<String, String> map1 = new HashMap<String, String>(); 
     map1.put("Fname", "Ankur"); 

     Map<String, String> map2 = new HashMap<String, String>(); 
     map2.put("Lname", "Singhal"); 

     myListOfMaps.add(map1); 
     myListOfMaps.add(map2); 

     for (int i = 0 ; i < myListOfMaps.size() ; i++) { 
      Map<String, String> myMap = myListOfMaps.get(i); 
      System.out.println("Data For Map" + i); 
      for (Entry<String, String> entrySet : myMap.entrySet()) { 
       System.out.println("Key = " + entrySet.getKey() + " , Value = " + entrySet.getValue()); 
      } 
     } 
    } 

輸出

Data For Map0 
Key = Fname , Value = Ankur 
Data For Map1 
Key = Lname , Value = Singhal 
+0

使用增強for循環或迭代器進行順序訪問。我只會建議使用'List.get(int)'來進行隨機訪問。 – YoYo

+0

Ankur這是給出錯誤的迴應 – Syed

+0

@Nizam運行上面的程序,同樣我已經執行,然後複製輸出,你的輸入可能會不同。 –

1

你重複的進行Map<String, String>類型的元素列表。所以鑄造到Map.Entry會給你一個ClassCastException

嘗試像這樣

Iterator it = list.iterator(); 
while (it.hasNext()) { 
    Map<String, String> map = (Map<String, String>) it.next(); 
    for (Map.Entry entry : map.entrySet()) { 
     System.out.println(entry.getKey() + " = " + entry.getValue()); 
    } 
} 

這將是您更容易,如果你沒有使用原始類型IteratorMap.Entry。儘可能使用泛型。因此,代碼是這樣的:

Iterator<Map<String, String>> it = list.iterator(); 
while (it.hasNext()) { 
    Map<String, String> map = it.next(); //so here you don't need a potentially unsafe cast 
    for (Map.Entry<String, String> entry : map.entrySet()) { 
     System.out.println(entry.getKey() + " = " + entry.getValue()); 
    } 
} 
3

忘記直接使用迭代器,何不簡單:

List<Map<String,String>> l = new ArrayList<>(); 
... 
// add map elements to list 
... 

for (Map<String,String> m:l) { 
    for (Map.Entry<String,String> e:m.entrySet()) { 
    String key = e.getKey(); 
    String value = e.getValue(); 
    // Do something with key/value 
    } 
} 

這就是所謂的Enhanced for Loop。在內部,它將把它作爲for循環遍歷任何集合的迭代器或任何其他的接口實現來處理。

它已經用於遍歷Map Entries中的一個答案,那麼爲什麼不用地圖列表呢?

當然,對於嵌套集合,還需要知道如何嵌套for循環(如何將循環放入其他循環)。

相關問題