GRAILS中的交替默认排序

GRAILS中的交替默认排序,grails,groovy,Grails,Groovy,为什么下面的Groovy代码段返回alternative [账户:2222和2222,账户:1111和1111]或 [账户:1111和1111,账户:2222和2222] 如果在Groovy控制台中多次运行它? 我认为sort语句会导致列表总是按降序排序 class Account { long number String code String toString() {return "Account: $number and $code"} static map

为什么下面的Groovy代码段返回alternative [账户:2222和2222,账户:1111和1111]或 [账户:1111和1111,账户:2222和2222] 如果在Groovy控制台中多次运行它? 我认为sort语句会导致列表总是按降序排序

class Account {
    long number
    String code
    String toString() {return "Account: $number and $code"}
    static mapping = {
        sort number:"desc"
    }
}
List items = []
items << new Account(number:1111,code:'1111')
items << new Account(number:2222,code:'2222')
println items.sort()
类帐户{
长号码
字符串代码
字符串toString(){return“Account:$number和$code”}
静态映射={
排序编号:“desc”
}
}
列表项=[]

items您不定义帐户实例之间的排序。mapping指令仅适用于GORM映射类(IOW:“域对象”),并且仅在从数据库AFAIK加载类实例时使用

但是,您将对象附加到一个普通列表中,该列表不知道GORM属性。为了在这样的上下文中可靠地对帐户实例列表进行排序,您必须指定明确的顺序,例如:

class Account implements Comparable {

   ...
   def int compareTo(rhs) {
       long onum = rhs.number;
       return (onum > number)? -1 : ((onum < number)? 1 : 0);
   }
   ...
}
类帐户实现可比较{
...
def int比较器(右){
长onum=rhs.编号;
返回值(onum>编号)?-1:((onum<编号)?1:0);
}
...
}

有关于该主题的更多信息。至于为什么Groovy在多次调用list时会对列表进行不同的排序。sort:嗯,我不知道…

Grails有两种主要的默认排序方式:

  • 查询时进行排序:

    def airports = Airport.list(sort:'name')
    
  • 在该对象上放置默认排序方法:

    class Airport {
     …
     static mapping = {
      sort name:"desc"
     }
    }
    
  • 以上内容摘自