44

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

假设这是我的课Thing

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

而且我没有为这种标准操作找到任何常规方法,也许有人提示我如何按日期按降序对我的东西进行排序?我上面一定有类似 orm 的东西, [sort: 'dtCreated', order: 'desc'] 不是吗?

4

3 回答 3

110

代替

things.sort{-it.dtCreated}

你可以试试

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

reverse() 什么都不做,因为它创建一个新列表而不是改变现有列表。

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

应该管用

things = things.reverse()

也是。

于 2013-06-20T21:31:15.727 回答
7

怎么样

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

在此处查找一些更有用的列表实用程序

于 2013-06-20T21:35:48.463 回答
-8

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

于 2015-03-30T18:53:59.563 回答