Groovy中的分组映射

Groovy中的分组映射,groovy,collections,grouping,Groovy,Collections,Grouping,这是我的地图,我正在尝试根据tripName(尼亚加拉/钦奈/南非)进行分组。我需要的输出是 [ programs: [ trip: [ [ description: "", tripName: "Niagra", scheduleProgramTime: "2000-01-01T00:00:00-05:00", country: "USA" ], [ descrip

这是我的地图,我正在尝试根据tripName(尼亚加拉/钦奈/南非)进行分组。我需要的输出是

[
  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
映射开始。您的示例不是Groovy
Map
,但是它看起来确实像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
映射开始。您的示例不是Groovy
Map
,但是它看起来确实像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']
    ],
]