Почему map.collectEntries() не работает для этих данных [[Name:sub, Value:23234]] - Groovy

Почему это работает:

def m =  [[1,11], [2,22], [3,33]]
println(m.collectEntries())

выход: [1:11, 2:22, 3:33]

Но это не работает:

def m = [[Name:sub, Value:23234], [Name:zoneinfo, Value:Europe/London]]

println(m.collectEntries())

выход:groovy.lang.MissingPropertyException: No such property: sub for class

Я хочу обработать эту карту, чтобы получить список пар ключ-значение, например:

["Имя:sub":"Значение:23234", "Имя:zoneinfo": "Значение: Европа / Лондон"]

где Name:sub это ключ и Value:23234 это значение.

Ссылка /questions/36862558/soberite-spisok-par-v-kartu/36862565#36862565

3 ответа

Во втором примере sub а также zoneinfo читаются как имена переменных, а не как строки, и вам нужно заключить их в кавычки.

def m = [[Name:'sub', Value:23234], [Name:'zoneinfo', Value:'Europe/London']]
println m.collectEntries{ ["Name:${it.Name}", "Value:${it.Value}"] }

Не может найти sub поле в вашем классе, возможно, вы хотите иметь строку "sub"?

По сути, запись карты может быть объявлена ​​двумя способами:

Name: 'sub'

а также

'Name': 'sub'

Для ключа предполагается, что это строка, даже если она не заключена в кавычки.

Но для значения обязательно заключать в кавычки. В противном случае он рассматривается как переменная (или поле)

Учитывая ваши желаемые результаты:

["Name:sub" :"Value:23234", "Name:zoneinfo": "Value:Europe/London"]

Что вам действительно нужно сделать, это процитировать весь элемент в каждой паре:

def m = [["Name:sub", "Value:23234"], ["Name:zoneinfo", "Value:Europe/London"]]
Другие вопросы по тегам