使用Entryset迭代Hashmap

时间:2012-11-23 03:44:20

标签: java map

for (Map.Entry<String, Map<String, List>> entry:Map1.entrySet()) 
{
    String key=entry.getKey();
    System.out.println("Type : " +key);

    for (Map.Entry<String, List> entry1 : entry.getKey().getValue().entrySet())
    {
        System.out.println("Type : " + entry1.getKey());
    }
}

我不知道应该用什么代替entry.getKey().getValue().entrySet()。任何人都可以解释我理解这一点。这是为了迭代嵌套映射。

我得到的错误是

.\common\devtracker\process\devtr\DevTrackerImpl.java:226: cannot find symbol
symbol  : method getValue()
location: class java.lang.String
for (Map.Entry<String, List<ProjectBreakupVO>>    entry1:entry.getKey().getValue().entrySet())

3 个答案:

答案 0 :(得分:2)

entry.getKey()没有方法getValue(),因为它只返回一个字符串。你可能想要的是什么

for (Map.Entry<String, List> entry1 : entry.getKey().getValue().entrySet())

是做

for (Map.Entry<String, List> entry1 : entry.getValue().entrySet())

答案 1 :(得分:0)

你应该使用....

for (Map.Entry<String, List> entry1 : entry.getKey().getValue().entrySet())

获取内循环的条目。

答案 2 :(得分:0)

如果您尝试迭代Map<String, List>类型的地图,并且在使用myMap.keySet()时遇到 findbugs 问题:

    for (String keyValue : myMap.keySet()) {
        String key = keyValue;
        List objValue = myMap.get(key);
    }

然后尝试使用myMap.entrySet()迭代地图,这是更值得推荐的:

    for(Map.Entry<String, List> entry: myMap.entrySet()) {
        String key = entry.getKey();
        List objValue = entry.getValue();
    }

因此在这种情况下嵌套forloop就像:

for (Map.Entry<String, Map<String, List>> entry:Map1.entrySet()) 
{
    String key=entry.getKey();
    System.out.println("Type : " +key);

    for (Map.Entry<String, List> entry1 : entry.getValue().entrySet())
    {
        System.out.println("Type : " + entry1.getKey());
    }
}