【问题标题】:Iterate over Map<Map<String,String>, Map<String,String>> in groovy在 groovy 中迭代 Map<Map<String,String>, Map<String,String>>
【发布时间】:2013-12-18 09:28:23
【问题描述】:

你好,我有复杂的结构

 Map<Map<String,String>, Map<String,String>> a

我想遍历它的所有元素。我试过了:

for(Map.Entry<Map<String,String>, Map<String,String>> first:firstMap.keySet()) { 
...
}

错误是

Cannot cast object '{key1=value1, key2=value2, key3=value3, key4=value4}' with class 'java.util.LinkedHashMap' to class 'java.util.Map$Entry' due to: groovy.lang.GroovyRuntimeException: Could not find matching constructor for: java.util.Map$Entry(java.util.LinkedHashMap)

如何迭代我的地图?

【问题讨论】:

    标签: loops map groovy


    【解决方案1】:

    你可以使用each:

    def a = [ ([a:'tim',b:'xelian']):[ a:1,b:2 ],
              ([a:'alice',b:'zoe']):[ a:3,b:4 ] ]
    
    a.each { key, value ->
        println "Key $key == Value $value"
    }
    

    【讨论】:

      【解决方案2】:

      keySet() 只返回它的键,所以它是一个Map&lt;String, String&gt; 的列表。如果您想遍历其Map.Entry,请删除.keySet()

      for (Map.Entry<Map<String, String>, Map<String, String>> entry : firstMap) {
        println "entry=$entry"
      }
      

      其他循环选项:

      // iterate with two arguments
      firstMap.each { Map<String, String> key, Map<String, String> value ->
        println "key=$key, value=$value"
      }
      
      // iterate through entries
      firstMap.each { Map.Entry<Map<String, String>, Map<String, String>> entry ->
        println "entry=$entry"
      }
      
      // untyped
      for (entry in firstMap) {
        println entry
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-01-06
        • 1970-01-01
        • 1970-01-01
        • 2015-12-05
        • 2020-08-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多