Почему 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"]]