Groovy中的分组映射
这是我的地图,我正在尝试根据tripName(尼亚加拉/钦奈/南非)进行分组。我需要的输出是Groovy中的分组映射,groovy,collections,grouping,Groovy,Collections,Grouping,这是我的地图,我正在尝试根据tripName(尼亚加拉/钦奈/南非)进行分组。我需要的输出是 [ programs: [ trip: [ [ description: "", tripName: "Niagra", scheduleProgramTime: "2000-01-01T00:00:00-05:00", country: "USA" ], [ descrip
[
programs: [
trip: [
[
description: "",
tripName: "Niagra",
scheduleProgramTime: "2000-01-01T00:00:00-05:00",
country: "USA"
],
[
description: "",
tripName: "Chennai",
scheduleProgramTime : "2000-01-01T00:00:00-05:00",
country: "India"
],
[
description: "",
tripName: "Niagra",
scheduleProgramTime: "2000-01-01T00:00:00-05:00",
country: "USA"
]
],
trip: [ // Editor note: this line is in error. a map cannot have two properties named "trip". In practice this compiles, but when run the SECOND "trip" wipes out the FIRST. -- @BalRog
[
description: "",
tripName: "South Africa",
scheduleProgramTime: "2000-01-01T00:00:00-05:00",
country: "Africa"
],
[
description: "",
tripName: "Chennai",
scheduleProgramTime: "2000-01-01T00:00:00-05:00",
country: "India"
]
]
]
]
我尝试使用这个cityMap.trip.groupBy({it.tripName})
但是没有得到正确的输出。
提前谢谢
我把它改成了地图。以前我用大括号代替“[]”大括号。现在根据地图,你能给我提供详细信息吗 首先,从一个合适的Groovy
映射开始。您的示例不是GroovyMap
,但是它看起来确实像JSON。如果是这样的话,您可以使用进行解析,以获得类似的Map
然后您可以在trip对象上使用groupBy()
:
输出如下所示:
def json = new JsonSlurper().parseText("""{
"trip": [
{
"description": "",
"tripName": "Niagra",
"scheduleProgramTime": "2000-01-01T00:00:00-05:00",
"country" : "USA"
},
{
"description": "",
"tripName": "Chennai",
"scheduleProgramTime": "2000-01-01T00:00:00-05:00",
"country" : "India"
},
{
"description": "",
"tripName": "Niagra",
"scheduleProgramTime": "2000-01-01T00:00:00-05:00",
"country" : "USA"
}
]
}
""")
json.trip.groupBy { it.tripName }
首先,从一个合适的Groovy映射开始。您的示例不是GroovyMap
,但是它看起来确实像JSON。如果是这样的话,您可以使用进行解析,以获得类似的Map
然后您可以在trip对象上使用groupBy()
:
输出如下所示:
def json = new JsonSlurper().parseText("""{
"trip": [
{
"description": "",
"tripName": "Niagra",
"scheduleProgramTime": "2000-01-01T00:00:00-05:00",
"country" : "USA"
},
{
"description": "",
"tripName": "Chennai",
"scheduleProgramTime": "2000-01-01T00:00:00-05:00",
"country" : "India"
},
{
"description": "",
"tripName": "Niagra",
"scheduleProgramTime": "2000-01-01T00:00:00-05:00",
"country" : "USA"
}
]
}
""")
json.trip.groupBy { it.tripName }
我已经更改了问题中的大括号。我需要它作为映射。谢谢你的帮助。然后你可以跳过JSON解析部分。谢谢Rosa。我还有一个问题。我正在更新我的问题。如果你还有其他问题,请保留这个问题,然后发布一个新问题。对不起,罗莎,我错把我的问题改在这里了。如果您能提供解决方案,我将不胜感激。我已经更改了问题中的大括号。我需要它来映射。谢谢您的帮助。然后您可以跳过JSON解析部分。谢谢Rosa。我还有一个问题。我正在更新我的问题。如果你还有其他问题,请保留这个问题,然后发布一个新问题。对不起,罗莎,我错把我的问题改在这里了。如果您能提供一个解决方案,我将不胜感激。这里的输入和所需的输出看起来有点像JSON,也有点像groovy Map/List文本,但实际上它们的语法都不正确。您选择的是JSON还是Groovy映射/列表文本?特别是,在JSON和Groovy中,都不能有两个同名的对象属性。显然,在同一映射/对象中有两个名为“trip”的属性;编辑即将出版。symantic错误(同一地图中的两个“跳闸”键)将保留。您必须解决这个问题。我修复了Groovy Map/List literal语法,但在您的输入Map/List literal中注释了逻辑错误。现在,假设您的给定输入被分配给一个名为cityMap
的变量,并且您修复了注意到的逻辑错误,下面应该会给您提供所需的结果:cityMap.programs.trip.groupBy{it.tripName}
这里的输入和所需的输出看起来都有点像JSON,也有点像groovy映射/列表文本,但实际上它们的语法都不正确。您选择的是JSON还是Groovy映射/列表文本?特别是,在JSON和Groovy中,都不能有两个同名的对象属性。显然,在同一映射/对象中有两个名为“trip”的属性;编辑即将出版。symantic错误(同一地图中的两个“跳闸”键)将保留。您必须解决这个问题。我修复了Groovy Map/List literal语法,但在您的输入Map/List literal中注释了逻辑错误。现在,假设您的给定输入被分配给一个名为cityMap
的变量,并且您修复了注意到的逻辑错误,下面应该会给出您想要的结果:cityMap.programs.trip.groupBy{it.tripName}
[
'Niagra': [
['country':'USA', 'description':'', 'scheduleProgramTime':'2000-01-01T00:00:00-05:00', 'tripName':'Niagra'],
['country':'USA', 'description':'', 'scheduleProgramTime':'2000-01-01T00:00:00-05:00', 'tripName':'Niagra']
],
'Chennai':[
['country':'India', 'description':'', 'scheduleProgramTime':'2000-01-01T00:00:00-05:00', 'tripName':'Chennai']
],
]