2012-07-18 117 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后可能是有用的