【问题标题】:JAVA how to iterate over values in a map of a mapJAVA如何遍历地图地图中的值
【发布时间】:2016-10-16 05:56:36
【问题描述】:

我有我创建的地图的地图

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

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

所以它可以是这样的:

Key1 -> KeyA -> value1

|--------> KeyB -> value2

|--------> KeyC ->value3

Key2 -> KeyA -> value2

|--------> KeyB -> value4

|--------> KeyC -> value1

只要我愿意就继续。

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

所以我有mainValue = "value2",我尝试使用名为thisValue 的值变量循环遍历doubleMap 中的所有值,如果thisValue.equals(mainValue) 则递增计数器

我不知道如何获得thisValue。我试试这样

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

但那给了我字母键。

如果我这样做 thisValue = doubleMap.get(currentNumKey).get(currentLetterKey) 它会给我我想要的正确值,但我不能遍历所有值

谢谢你

【问题讨论】:

  • 我认为您需要向我们展示您的代码,而不是试图解释它。有太多的空白(例如你提到了letterKeys,但没有告诉我们这是什么意思——请不要解释它的意思,给我们看代码)。
  • 发布minimal reproducible example 展示你尝试了什么以及困难是什么。
  • @ajb 我显示所有代码需要。 letterKeys 显然只是 = KeyA、KeyB、KeyC ......这只是理解我在谈论哪个键的方式
  • 嗯,你很清楚。我不清楚。
  • 如果“我显示所有代码需要”,我希望你能从比我更聪明的人那里得到帮助。我无法根据它提供帮助。对不起。

标签: java loops hashmap multimap


【解决方案1】:
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()。

【讨论】:

    【解决方案2】:

    您可以使用values() 方法获取映射中所有值的Collection。对于doubleMap,这将为您提供Map&lt;String,String&gt; 的集合。然后,您可以遍历该集合并为每个 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。循环应该看起来相似。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      • 2011-03-23
      相关资源
      最近更新 更多