Как сортировать доменные объекты с атрибутом типа JodaTime/DateTime в Grails 1.3.7?

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

Я использую плагин 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


person whitenexx    schedule 06.09.2011    source источник


Ответы (3)


Попробуй это:

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

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

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

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

person Dónal    schedule 06.09.2011
comment
Это тоже не работает. Я думаю, что моя ошибка в другом. Я обновляю свой первый пост/вопрос. Пожалуйста, посмотрите на это :) - person whitenexx; 07.09.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}
person gotomanners    schedule 06.09.2011
comment
Я думаю, что startTime <=> obj.startTime немного более грувовый эквивалент - person Dónal; 06.09.2011
comment
Это не работает для меня. Может быть, мой метод getEventsNext() неверен? Я отредактировал свой первый пост/вопрос, пожалуйста, посмотрите на него! - person whitenexx; 07.09.2011

Пытаться

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

JavaDoc для isAfterNow()

person user569825    schedule 07.09.2011