Как отсортировать доменные объекты с атрибутом с типом JodaTime / DateTime в граалях 1.3.7? - PullRequest
0 голосов
/ 06 сентября 2011

Я работаю над небольшим календарем событий и хочу отсортировать события по времени начала!

Я использую плагин JodaTime в Grails для атрибута 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): /event/list

Ответы [ 3 ]

2 голосов
/ 06 сентября 2011

Попробуйте:

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

Чтобы изменить порядок сортировки, используйте:

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

К вашему сведению, Groovy добавляет этот метод sort() к Collection, чтобы вы могли удалить1009 * из кода выше, если events уже является Collection.

1 голос
/ 06 сентября 2011

Попробуйте переопределить метод compareTo в классах вашего домена.

Например,

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

Редактировать

Сортировать события так:

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

Или, как предлагает @Don, отличный эквивалент

def sortedEvents = events.sort{e1,e2-> e1.startTime <=> e2.startTime}
0 голосов
/ 07 сентября 2011

Попробуйте

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

JavaDoc для isAfterNow ()

...