0

我正在制作一个小型活动日历,我想按开始时间对活动进行排序!

我在 grails 中使用 JodaTime 插件作为 startTime 属性。( http://www.grails.org/JodaTime+Plugin )

那么,我该如何使用这种数据类型进行排序呢?这不起作用:

def sortedEvents = events.asList().sort({ a, b -> a.startTime <=> b.startTime } as Comparator)

我希望你能帮帮我!

谢谢,whitenexx

/EDIT/ 这是我获取事件的代码:

    def getEventsNext(Location location) {
        def events = location.events.findAll { it.endTime >= new DateTime() }
    def sortedEvents = events.sort{it.startTime}
    System.out.println(sortedEvents); //test
    return sortedEvents
}

在 /event/list 操作中,g:sortableColumn 一切正常(按 startTime 排序): /活动列表

4

3 回答 3

2

尝试这个:

def sortedEvents = events.asList().sort{it.startTime}

要反转排序顺序,请使用:

def sortedEvents = events.asList().sort{-it.startTime}

仅供参考,Groovy 添加了这个sort()方法,Collection所以asList()如果events已经是Collection.

于 2011-09-06T10:12:02.927 回答
1

尝试覆盖compareTo域类中的方法。

例如,

int compareTo(obj) {
    startTime.compareTo(obj.startTime)
} 

编辑

像这样对您的事件进行排序:

def sortedEvents = events.sort{e1,e2-> e1.startTime.compareTo(2.startTime)}

或者正如@Don 所建议的那样,groovier 等价物

def sortedEvents = events.sort{e1,e2-> e1.startTime <=> e2.startTime}
于 2011-09-06T09:52:31.380 回答
0

尝试

def events = location.events.findAll { it.endTime.isAfterNow() }
def sortedEvents = events.sort{it.startTime.toDate()}

isAfterNow() 的 JavaDoc

于 2011-09-07T16:21:45.980 回答