2012-07-18 111 views
2

有時我發現自己複製代碼以從Map中提取鍵和值條目(例如,在測試/調試第三方API時)。迭代映射中的鍵和值

Map<String, String> someMap; 
Set<String> keys = someMap.keySet(); 
for(int j=0;j<someMap.size();j++){ 
    String key = (String) keys.toArray()[j]; 
    System.out.println("key > " + key + " : value = " + someMap.get(key)); 
} 

我知道Groovy中有這樣一些偉大的抽象(如Get key in groovy maps),但我限制爲POJ。在Java中我的意思是肯定必須有一個更優雅和更不詳細的方式來做到這一點?

回答

4

您可以使用每個循環簡化代碼:

Map<String, String> someMap; 
for(String key : someMap.keySet()){ 
    System.out.println("key > " + key + " : value = " + someMap.get(key)); 
} 

或者你做到這一點與條目集。 Amit在我編輯我的答案時提供了一些代碼;-)

+0

這個解決方案確實比原來更優雅,但是請注意,對於迭代鍵和值 - 通常它是不需要迭代鍵的,然後得到該值使用get()方法 - 由於額外查找的性能開銷。當你遍歷'Entry'集合時,它預計會執行得更快。 – amit 2012-07-18 08:31:34

+1

閱讀http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Map.Entry.html後,我必須同意Amit。但出於實施目的,這是我的優先答案。多謝你們 – raven 2012-07-18 08:37:56

9

您可以使用Entry<String,String>並使用for-each loop進行迭代。您使用Map.entrySet()獲得Entry對象。

從條目中鍵和值可以使用Entry.getKey()Entry.getValue()

代碼示例中提取:

Map<String, String> someMap; 
for (Entry<String,String> entry : someMap.entrySet()) { 
    System.out.println("key > " + entry.getKey()+ " : value = " + entry.getValue()); 
} 
0

取決於你想要做什麼,谷歌收藏有Maps API,它提供一些幫助功能來轉換地圖等

如果你只是想漂亮打印地圖,this後可能是有用的