Groovy перебрать карту карт - PullRequest
0 голосов
/ 16 июня 2020

У меня есть карта groovy, которая выглядит, как показано ниже.

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

Я хочу перебрать все значения (для obj_1 перебирать значения списка ['1', '2'] ) для каждого объекта и запустить метод из объекта.

obj_1.method(1)
obj_1.method(2)
obj_2.method(3)
obj_2.method(4)

1 Ответ

3 голосов
/ 16 июня 2020

Зависит от того, почему вы хотите это сделать, но вы можете взять значения и сгладить их:

image_map.values().flatten().each {
    println it
}

Итак, с добавленным требованием в комментарии вы могли бы сделать:

image_map.collectMany { k, v -> v.collect { "${k}.method($it)" } }
    .each { println it }

Для печати

obj_1.method(1)
obj_1.method(2)
obj_2.method(3)
obj_2.method(4)

Отредактируйте 2 с другим требованием ... Предполагая, что ключи ЯВЛЯЮТСЯ объектами (а не строками):

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) }

Выводит:

I am obj1 1
I am obj1 2
I am obj2 3
I am obj2 4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...