2013-03-25 86 views
0

我想排序的對象列表,我在網上搜索,我不明白爲什麼它不起作用。無法排序有很多關係

下面是一個包含我想對列表進行排序我的域類:

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 } 

我不明白哪裏是錯誤,爲什麼我的列表沒有正確排序。有人可以幫忙嗎?

謝謝。

+3

'myClass.foos.toList(){排序} it.day' – 2013-03-25 13:12:11

回答

3

您有兩個選項,默認情況下如何對對象進行排序。兩者都是排序類中:

  1. (以一個簡單的排序alogorithms):

    static mapping = { 
        sort 'dateCreated':'desc' 
    } 
    
  2. (複雜的排序算法使用的函數):

    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的排序算法。

+0

我的階級是不持久(mapWith = 「無」),我認爲我可以。在靜態映射塊中使用排序。我要用compareTo()來嘗試該方法。謝謝。 – Hito 2013-03-25 10:35:44

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 {它。日期} .reverse()給出正確的結果。

5

hasMany默認支持Set。嘗試將其更改爲一個List,如:

class MyClass { 
    Integer bar 
    List foos 
    static hasMany = [foos : Foo] 
}