2016-04-30 3 views
-2

Я пытаюсь выполнить итерацию по карте и создать новое значение карты. Ниже входнойgroovy: создать список значений со всеми строками

def map = [[name: 'hello', email: ['on', 'off'] ], [ name: 'bye', email: ['abc', 'xyz']]] 

Я хочу, чтобы полученные данные были как:

[hello: ['on', 'off'], bye: ['abc', 'xyz']] 

код я прямо сейчас -

result = [:] 
map.each { key -> 
    result[random] = key.email.each {random -> 
      "$random" 
     } 
    } 
return result 

выше код возвращает

[hello: [on, off], bye: [abc, xyz]]

Как вы можете видеть выше, цитаты из on, off и abc, xyz исчезли, что вызывает проблемы для меня, когда я пытаюсь сделать проверку значения списка [on, off]

+0

Я не знаю, как бы работал вышеприведенный код! Возможно, вы все это не вложили. Я добавил рабочий ниже. – mohsenmadi

ответ

0

Вы можете преобразовать его к json, а затем все будет иметь котировки

0

Это делается. Тем не менее, должен быть/может быть более привлекательный способ.

def listOfMaps = [[name: 'hello', email: ['on', 'off'] ], [ name: 'bye', email: ['abc', 'xyz']]] 
def result = [:] 
listOfMaps.each { map -> 
    def list = map.collect { k, v -> 
     v 
    } 
    result[list[0]] = ["'${list[1][0]}'", "'${list[1][1]}'"] 
} 
println result 
+0

Или вы можете заменить объект 'list' на' def list = map.collect {(it.value)} ' – mohsenmadi

1

Это не должно иметь значения. Если вы видите результат в консоли Groovy, они все равно String.

Ниже должно быть достаточно:

map.collectEntries { 
    [ it.name, it.email ] 
} 

Если вы все еще нуждаются в одиночные кавычки, чтобы создать GString вместо String, то ниже твик потребуется:

map.collectEntries { 
    [ it.name, it.email.collect { "'$it'" } ] 
} 

лично я не см. любые рассуждения о том, что происходит дальше. BTW, map не является Map, это List, вы можете переименовать его, чтобы избежать ненужных путаниц.

Смежные вопросы