Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting 重写自引用对象(父/子关系)上的compareTo_Sorting_Grails_Compareto - Fatal编程技术网

Sorting 重写自引用对象(父/子关系)上的compareTo

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 &

我试图在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 && 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作为子子类,它的顺序将作为集合中的第一个元素。希望这能澄清问题。我还没有根据你的建议尝试递归解决方案