我正在尝试对对象列表进行排序,我在网上搜索,但我不明白为什么它不起作用。
这是我的域类,其中包含我要排序的列表:
class MyClass {
Integer bar
static hasMany = [**foos : Foo**]
}
对象Foo看起来像这样:
class Foo {
LocalDate day
String name
}
我想按日期排序foos。所以我试着写:
MyClass myClass = new MyClass()
//foos contains 10 days.
myClass.foos = myClass.foos.sort { it.day }
我不明白错误在哪里以及为什么我的列表没有正确排序。有人可以帮忙吗?
感谢。
答案 0 :(得分:5)
hasMany
由Set
支持。尝试将其更改为List
,例如:
class MyClass {
Integer bar
List foos
static hasMany = [foos : Foo]
}
答案 1 :(得分:3)
默认情况下,您有两种方法对对象进行排序。两者都在可排序的类中:
(对于简单的排序算法):
static mapping = {
sort 'dateCreated':'desc'
}
(对于使用函数的复杂排序算法):
class Target implements Comparable {
...
int compareTo(o) {
if(o instanceof Target) {
Target t = (Target) o
// sort multidimensional
return (this.target_definition_order <=> t.target_definition_order ?:
this.target_order <=> t.target_order )
} else
return 0
}
}
您的问题可能是特殊班级LocalDate
的排序算法。
答案 2 :(得分:0)
如果使用Date对象而不是LocalDate,则使用您提供的代码可以进行排序。
use(TimeCategory) {
MyClass myClass = new MyClass(bar: 1)
Date today = new Date()
def foo = new Foo(name: "a", day: today)
myClass.addToFoos(foo)
myClass.save(flush: true)
foo = new Foo(name: "a", day: today+1.second)
myClass.addToFoos(foo)
foo = new Foo(name: "a", day: today+2.second)
myClass.addToFoos(foo)
foo = new Foo(name: "a", day: today+3.second)
myClass.addToFoos(foo)
foo = new Foo(name: "a", day: today+4.second)
myClass.save(flush: true)
}
使用myClass.foos.sort {it.date}或myClass.foos.sort {it.date} .reverse()会得到正确的结果。