簡體   English   中英

如何按年,月,日對事件列表進行分組

[英]how to group a list of events by year, month, date

需要一些幫助轉換從以下位置返回的數據:

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],...],...],...]

我需要以下內容:

[yearList: [yearValue: 2017, monthList: [ monthValue: July, dateList: [ dateValue: 07/21/2017, events: [ eventTitle: TestEvent, eventStartDatetime: 2017-07-17 12:00:00Z],...],...],...]....]

如何創建所描述的數據輸出?

我可能在這里的某些地方犯了一個小錯誤,但我認為這是您想要的:

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)

我沒有機會進行測試,所以就像我說的那樣,我可能犯了一個小錯誤,但您應該明白這一點。

因此,通過一些工作,我得到了一個示例輸入(順便說一句,真實的示例輸入始終很不錯,因為它可以更輕松地查看您所擁有的東西。在旅途中,有兩件事很重要,從哪里開始,在哪里想要完成):

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() }
)

然后,我們只需要簡單的重新組織步驟就可以將此分組圖轉換為所需的格式:

// Then modify to the format you want
def result = [
    yearList: grouped.collect { year, yGroup ->
        [ yearValue: year, monthList: yGroup.collect { month, mGroup ->
            [ monthValue: month, dateList: mGroup.collect { date, dGroup ->
                [ dateValue: date, events: dGroup ]
            } ]
        } ]
    }
]

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM