如何按年,月,日对事件列表进行分组

时间:2017-07-21 16:37:17

标签: groovy

需要一些帮助来转换从以下位置返回的数据:

Funding

上面的代码目前返回:

def groupedResults = searchResults.groupBy{it.eventYear}{it.eventMonth}{it.eventStartDate};

我需要以下内容:

[2017: [ July: [ 07/17/2017: [ [eventName: TestEvent1, eventStartDatetime: 2017-07-17 12:00:00Z], [eventName: TestEvent2, eventStartDatetime: 2017-07-17 1:00:00Z] ], [07/18/2017: [ [eventName: TestEvent3, eventStartDatetime: 2017-07-17 12:00:00Z],...],...],...]

如何按照描述创建数据输出?

2 个答案:

答案 0 :(得分:0)

我可能在某处犯了一个小错误,但我认为这就是你想要的:

def yearList = []
groupedResults.each{ year , month ->
    def dateList = []
    month.each{ date , events
        def eventList = []
        events.each{ event ->
            eventList.add([ eventTitle: event.evenName, eventStartDatetime: event.eventStartDateTime])
        }
        def eventMap = [:]
        eventMap.put("dateValue": date)
        eventMap.put ("events": eventList)
        dateList.add(eventMap)
    }
    dateMap  =[:]
    dateMap.put("dateList": dateList)
    dateMap.put("monthValue": month)
    yearList.add(["yearValue": year, "monthList": dateMap])
}
yearMap = [:]
yearMap.put("yearList": yearList)

我没有机会进行测试,就像我说我可能犯了一个小错误,但你应该明白这一点。

答案 1 :(得分:0)

所以通过一些工作,我得到了一个示例输入(真正的示例输入总是在一个问题btw中很好,因为它可以更容易地看到你有什么。在旅程中,有两件事是重要的,你从哪里开始,你要完成的地方):

$ cat /proc/meminfo

然后我们可以按照您目前的方式对它们进行分组:

import java.time.*
import java.time.format.*

def parse = { s ->
    LocalDateTime.parse(s, DateTimeFormatter.ofPattern('yyyy-MM-dd HH:mm:ssVV'))
}

def searchResults = [
    [xEventStartDateTime:parse('2017-07-17 12:00:00Z'), eventTitle:'National Funeral Directors Association (NFDA) Conference'],
    [xEventStartDateTime:parse('2017-07-24 12:00:00Z'), eventTitle:'Gathering of Warlocks'],
    [xEventStartDateTime:parse('2018-02-17 12:00:00Z'), eventTitle:'Goose worriers meetup'],
    [xEventStartDateTime:parse('2017-01-17 12:00:00Z'), eventTitle:'The new year angering of optometrists']
]

然后,我们只需要一个简单的重新组织步骤就可以将这个分组的地图变成您想要的格式:

// Group as normal
def grouped = searchResults.groupBy(
    { it.xEventStartDateTime.year }, 
    { it.xEventStartDateTime.month }, 
    {it.xEventStartDateTime.toLocalDate() }
)

希望这有帮助!