Groovy遍历Map of Maps嵌套结构输出键值的正确实现方法
问题根源
你最初的遍历代码报错,核心是each闭包的参数顺序写反了。Groovy 遍历Map时,each方法传入的闭包第一个参数是外层键,第二个参数才是键对应的嵌套Map值。你代码里的item实际拿到的是LinkedHashMap.Entry类型的键值对对象,自然不存在firstName属性,才会抛出MissingPropertyException。
你尝试转ConfigObject调用toProperties()的方案本身和需求不匹配:这个方法的作用就是把多层嵌套Map拍平成带层级前缀的一维键值对,本来就会丢失外层独立键的结构,属于绕路的无效方案。
最佳实现方案
不需要做额外的类型转换,直接修正each的参数顺序即可,代码最简洁也最符合Groovy的惯用写法:
// 定义示例Map def exampleMap = [ "person1": ["firstName": "John", "lastName": "Doe", "id": "1"], "person2": ["firstName": "Jane", "lastName": "Doe", "id": "2"] ] // 遍历打印 exampleMap.each { outerKey, innerProp -> println outerKey println innerProp.firstName println innerProp.lastName // 如果需要不同人员的输出之间空行,可以额外加一句 println() }
运行后输出完全匹配你的预期:
person1 John Doe person2 Jane Doe
如果需要只输出指定外层键对应的内容,直接在遍历内加判断即可,比如仅打印person1的信息:
exampleMap.each { outerKey, innerProp -> if (outerKey == "person1") { println outerKey println innerProp.firstName println innerProp.lastName } }
内容的提问来源于stack exchange,提问作者anechkayf
相关产品推荐
相关产品推荐

