首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Groovy迭代映射映射

Groovy迭代映射映射
EN

Stack Overflow用户
提问于 2020-06-16 21:07:52
回答 1查看 396关注 0票数 0

我有一个很棒的地图,如下所示。

代码语言:javascript
复制
image_map = [:]
image_map = [obj_1: ['1','2'], obj_2: ['3','4']]

我想遍历每个对象的所有值(对于obj_1,遍历列表值‘1’,'2'),并从该对象运行一个方法。

代码语言:javascript
复制
obj_1.method(1)
obj_1.method(2)
obj_2.method(3)
obj_2.method(4)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-16 22:06:46

这取决于您为什么要这样做,但您可以获取这些值并将其展平:

代码语言:javascript
复制
image_map.values().flatten().each {
    println it
}

因此,有了注释中添加的要求,您可以这样做:

代码语言:javascript
复制
image_map.collectMany { k, v -> v.collect { "${k}.method($it)" } }
    .each { println it }

要打印

代码语言:javascript
复制
obj_1.method(1)
obj_1.method(2)
obj_2.method(3)
obj_2.method(4)

使用另一个要求编辑2...假设键是对象(而不是字符串):

代码语言:javascript
复制
def obj_1 = [method: { it -> "I am obj1 $it" }]
def obj_2 = [method: { it -> "I am obj2 $it" }]

image_map = [(obj_1): ['1','2'], (obj_2): ['3','4']]

image_map.collectMany { k, v -> v.collect { [object: k, param: it] } }
    .each { println it.object.method(it.param) }

打印:

代码语言:javascript
复制
I am obj1 1
I am obj1 2
I am obj2 3
I am obj2 4
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62409274

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档