如何使用grails 1.3.7中具有JodaTime / DateTime类型的属性对Domain-Objects进行排序?

时间:2011-09-06 09:39:53

标签: grails groovy gorm jodatime grails-controller

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

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

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

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

我希望你能帮助我!

谢谢, whitenexx

/编辑/ 这是我得到事件的代码:

    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排序): /event/list

3 个答案:

答案 0 :(得分:2)

试试这个:

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

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

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

仅供参考,Groovy将此sort()方法添加到Collection,因此如果asList()已经是events,您可以从上面的代码中删除Collection

答案 1 :(得分: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}

答案 2 :(得分:0)

尝试

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

JavaDoc for isAfterNow()