按日期按降序排序列表 - groovy madness

时间:2013-06-20 21:10:23

标签: java date sorting grails groovy

我无法按照下降顺序按日期对对象列表进行排序

让我们说这是我的课程

class Thing {

Profil profil
String status = 'ready'
Date dtCreated = new Date()
}

在我正在创建List things

的方法中
            List profiles = profil.xyz?.collect { Profil.collection.findOne(_id:it) }

            List things = []

然后我用每个配置文件的每个相关Thing填充列表

            profiles.each() { profile,i ->
                if(profile) {
                    things += Thing.findAllByProfilAndStatus(profile, "ready", [sort: 'dtCreated', order: 'desc']) as 
                 }

好吧,现在things里面有很多东西,不幸的是[order: 'desc']被应用到每一组东西上,我需要通过dtCreated对整个列表进行排序,这样就像

            things.sort{it.dtCreated}

很好,现在所有的东西都按日期排序,但排序错误,最近的事情是列表中的最后一件事

所以我需要向相反的方向排序,我没有在网上找到任何可以向前推进的东西,尝试像

这样的东西
            things.sort{-it.dtCreated} //doesnt work
            things.sort{it.dtCreated}.reverse() //has no effect

并且我没有找到任何这种标准操作的常规方法,也许有人暗示我如何按照命令顺序按日期排序我的东西?我必须在[sort: 'dtCreated', order: 'desc']之上使用像orm这样的东西 或者不是吗?

提前感谢任何提示

3 个答案:

答案 0 :(得分:85)

而不是

things.sort{-it.dtCreated}
你可以尝试

things.sort{a,b-> b.dtCreated<=>a.dtCreated}

reverse()不执行任何操作,因为它会创建一个新列表,而不是改变现有列表。

things.sort{it.dtCreated}
things.reverse(true)

应该有效

things = things.reverse()

答案 1 :(得分:5)

怎么样

things.sort{it.dtCreated}
Collections.reverse(things)

查看here以获取更多有用的列表实用程序

答案 2 :(得分:-7)

您也可以使用things.first()和things.last()来提取列表的第一个和最后一个元素。