JAVA如何迭代地图的地图中的值

时间:2016-10-16 05:56:36

标签: java loops hashmap multimap

我有用

创建的地图地图

Map<String, Map<String, String>> doubleMap = new HashMap<>();

我尝试迭代第二张地图中的键值。

所以它可以像:

Key1 - &gt; KeyA - &gt;值1

| --------&GT; KeyB - &gt;值2

| --------&GT; KeyC - &gt; value3

Key2 - &gt; KeyA - &gt;值2

| --------&GT; KeyB - &gt; VALUE4

| --------&GT; KeyC - &gt;值1

继续我想要的。

我想检查地图中是否有与其他字符串匹配的值。

所以我有mainValue = "value2",我尝试使用名为doubleMap的值变量循环遍历thisValue中的所有值,并在thisValue.equals(mainValue)

时使用递增计数器

我不知道如何得到thisValue。我试试这个

thisValue = doubleMap.get(currentNumKey).keySet().toArray()[counter]

但这给了我一封信凯斯。

如果我做thisValue = doubleMap.get(currentNumKey).get(currentLetterKey)它给了我想要的正确值,但我不能迭代所有值

谢谢你

2 个答案:

答案 0 :(得分:2)

Map<String, Map<String, String>> nestedMap = new HashMap<>();
nestedMap.put ... 

重命名(doubleMap非常具有误导性),并表示创建一个空的单独地图不会。

现在您可以迭代您的地图,如:

for (Entry<Map<Map<String, String>>> outer : nestedMap.entrySet) {
  outer.getKey() ... would be "Key1"
  outer.getValue() ... represents that inner map

对于内环,它是非常相同的;意味着你可以对outer.getValue()返回的值使用for-each和entrySet()。

答案 1 :(得分:1)

您可以使用values()方法获取地图中所有值的Collection。对于doubleMap,这将为您提供Map<String,String>的集合。然后,您可以遍历该集合,并为每个Map执行相同的操作以找到您的值:

for (Map<String,String> map : doubleMap.values()) {
    for (String val : map.values()) {
        if (mainValue.equals(val)) {
            // value was found
        }
    }
}

如果您需要导致该值的键(当然,可能会多次出现),那么您需要迭代使用Map.keySet()(或条目)获得的密钥集设置,使用Map.entrySet())获取doubleMap以及为每个密钥检索的每个Map。循环应该看起来很相似。