Java - 如何迭代hashmap列表的hashmap

时间:2016-10-04 06:15:26

标签: java hashmap

我想迭代一个hashmap列表的hashmap。

例如,

HashMap <String, List <HashMap<String, String> > >

如何迭代此地图。

请帮我找一个解决方案。

3 个答案:

答案 0 :(得分:0)

让我们为您的地图命名。

statusData.msgStart = 0x02;
            statusData.msgLen = 0x2d;
            statusData.msgId = 0xb0;
            statusData.dataValidity = 0xfff;
            statusData.clusterId = 0;
            statusData.lumId = 0;
            statusData.msgStop = 0x03;

另一种方法是通过集合使用嵌套循环:

HashMap<String, List<HashMap<String, String>>> map; //I'll assume it is initialized and filled with something.

for (String key : map.keySet()) {
    for (HashMap<String, String> map2 : map.get(key)) {
        for (String key2 : map2.keySet()) {
            //do something
        }
    }
}

有点不同。如果您不需要知道值的键,则第二个更好。

答案 1 :(得分:0)

你应该看看你的设计,这听起来像是一种可以用更简单的方式构建的东西。考虑将这个集合分成几类。 但是,万一你现在无法改变(或没有时间),我会提供帮助。

最简单的方法可能是在几个步骤中打破迭代:

  1. 迭代内部HashMaps
  2. 迭代列表
  3. 迭代内部HashMaps中的内容
  4. 以下是基本代码:

    for (List<HashMap<String, String>> list : map.values()) {
        for (HashMap<String, String> map2 : list) {
            for (String veryInnerValue : map2.values()) {
                //do something
            }
        }
    }
    

答案 2 :(得分:0)

如果您需要知道每张地图的关键字和值:

Map<String, List<HashMap<String, String>>> myMap = new HashMap<String, List<HashMap<String, String>>>();

// loop for first map
for (Entry<String, List<HashMap<String, String>>> myMapEntry : myMap.entrySet()) {
    System.out.println("myMap entry key" + myMapEntry.getKey() + ", key ");

    // loop for list (value of entry)
    for (HashMap<String, String> valueOfList : myMapEntry.getValue()) {

        // loop for second map                
        for (Entry<String, String> entryOfMapOfList : valueOfList.entrySet()) {
            System.out.println("key " + entryOfMapOfList.getKey() + " value " + entryOfMapOfList.getValue());
        }
    }
}