Sorting 重写自引用对象(父/子关系)上的compareTo
我试图在grails中的一个域类上实现compareTo,以便返回一个SortedSet。我希望我的排序集按父名称排序,然后按“子”名称排序。例如(P=父,C=子):Sorting 重写自引用对象(父/子关系)上的compareTo,sorting,grails,compareto,Sorting,Grails,Compareto,我试图在grails中的一个域类上实现compareTo,以便返回一个SortedSet。我希望我的排序集按父名称排序,然后按“子”名称排序。例如(P=父,C=子): P-1 C-1 C-2 P-2 C-3 C-4 我的班级看起来像这样: class Issue implements Comparable { String name Issue parent @Override public int compareTo(obj){ if(obj.parent!=null &
- P-1
- C-1
- C-2
- P-2
- C-3
- C-4
class Issue implements Comparable {
String name
Issue parent
@Override
public int compareTo(obj){
if(obj.parent!=null && this.parent!=null){
parent.name.compareTo(obj.parent.name)
}else{
//What do I compare to sort the children relative to their parents?
}
}
如果您所要寻找的只是排序集,那么仅仅实现Comparable on Issue并对映射使用排序顺序就足够了吗
class Issue implements Comparable {
String name
Issue parent
SortedSet children
static hasMany = [children : Issue]
static belongsTo = [parent : Issue]
static mapping = {
sort 'name'
children sort:'name'
}
@Override
public int compareTo(obj){
if(obj){
this.name?.compareTo(obj.name)
}
}
如果您所要寻找的只是排序集,那么仅仅实现Comparable on Issue并对映射使用排序顺序就足够了吗
class Issue implements Comparable {
String name
Issue parent
SortedSet children
static hasMany = [children : Issue]
static belongsTo = [parent : Issue]
static mapping = {
sort 'name'
children sort:'name'
}
@Override
public int compareTo(obj){
if(obj){
this.name?.compareTo(obj.name)
}
}
谢谢你的建议!当我尝试这样做时,我得到一个NullPointerException-至少有一个实例的父对象为null。我可以写一个自定义SQL查询来做我想做的事情,但是我不知道如何在HQL中做。哎呀,我的错,我是说这个.name而不是parent.name.Um,事实上…如果有多个级别的父/子嵌套呢?刚刚创建了一个三级实例(即subchild),您的实现似乎将其排在最前面-有什么建议吗?嗯,我不确定我是否理解“最上面的权利”,您能举个例子吗?我也意识到hasMany和belongsTo都不见了,于是又加上了这些。谢谢Kaleb!我的类已经包含一个hasMany属性,所以…如果我在C1下添加SC-1作为子子类,它的顺序将作为集合中的第一个元素。希望这能澄清问题。我还没有用你的建议尝试递归解决方案谢谢你的建议!当我尝试这样做时,我得到一个NullPointerException-至少有一个实例的父对象为null。我可以写一个自定义SQL查询来做我想做的事情,但是我不知道如何在HQL中做。哎呀,我的错,我是说这个.name而不是parent.name.Um,事实上…如果有多个级别的父/子嵌套呢?刚刚创建了一个三级实例(即subchild),您的实现似乎将其排在最前面-有什么建议吗?嗯,我不确定我是否理解“最上面的权利”,您能举个例子吗?我也意识到hasMany和belongsTo都不见了,于是又加上了这些。谢谢Kaleb!我的类已经包含一个hasMany属性,所以…如果我在C1下添加SC-1作为子子类,它的顺序将作为集合中的第一个元素。希望这能澄清问题。我还没有根据你的建议尝试递归解决方案