为什么 map.collectEntries() 不适用于此数据 [[Name:sub, Value:23234]] - Groovy

Why map.collectEntries() not working for this data [[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

我想处理该映射,以便获得如下键值对列表:

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

其中 Name:sub 是键,Value:23234 是值。

引用

在您的 class 中找不到 sub 字段,您可能想要一个字符串 "sub"?

基本上,地图条目可以通过两种方式声明:

Name: 'sub'

'Name': 'sub'

假设键是一个字符串,即使它没有用引号引起来。

但对于值,必须用引号引起来。否则,它被视为一个变量(或字段)

在第二个示例中,subzoneinfo 被读取为变量名,而不是字符串,您需要引用它们。

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

鉴于您想要的结果:

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

您实际需要做的是在每对中引用整个项目:

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