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 }

どこが間違っているのか、リストが正しくソートされていない理由がわかりません。誰かが助けることができますか?

ありがとう。

4

3 に答える 3

5

hasManySet、デフォルトで によってサポートされています。に変更してみてくださいList

class MyClass {
    Integer bar
    List foos
    static hasMany = [foos : Foo]
}
于 2013-03-25T11:04:57.927 に答える
3

デフォルトでオブジェクトをソートする方法は 2 つあります。どちらもソート可能なクラス内にあります。

  1. (単純なソートアルゴリズムの場合):

    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

于 2013-03-25T10:32:53.233 に答える
0

LocalDate の代わりに Date オブジェクトを使用すると、指定したコードを使用して並べ替えが機能します。

        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() を使用すると、正しい結果が得られます。

于 2013-03-25T10:37:15.187 に答える