在Groovy中按地图分组

时间:2016-08-25 15:03:14

标签: groovy collections grouping

[
  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"
      ]
    ]
  ]
]

这是我的地图,我正在尝试基于tripName(Niagra / Chennai /南非)进行分组。我需要的输出就像

[
  "Niagra": [
    [
      description: "",
      tripName: "Niagra",
      scheduleProgramTime: "2000-01-01T00:00:00-05:00"
      country: "USA"
    ],
    [
      description: "",
      tripName: "Niagra",
      scheduleProgramTime: "2000-01-01T00:00:00-05:00"
      country: "USA"
    ]
  ],
  "Chennai": [
    [
      description: "",
      tripName: "Chennai",
      scheduleProgramTime: "2000-01-01T00:00:00-05:00"
      country: "India"
    ]
  ],
  "South Africa": [
    [
      description: "",
      tripName: "South Africa",
      scheduleProgramTime: "2000-01-01T00:00:00-05:00"
      country: "Africa"
    ]
  ]
]

我尝试使用此cityMap.trip.groupBy({it.tripName})但未获得正确的输出。 提前谢谢。

我已将其更改为Map。现在我以前给过花括号而不是" []"现在你可以根据地图给我提供详细信息。

1 个答案:

答案 0 :(得分:3)

首先,从正确的Groovy Map开始。您的示例不是Groovy Map,但它看起来像JSON。如果是这样,您可以使用JsonSlurper对其进行解析,以获得Map之类的内容。 然后您可以在行程对象上使用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 }

输出如下:

[
    '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']
    ],
]