2011-02-09 43 views
0

は次のようにしようとしました:それは動作しませんGroovy配列を比較するには?

ArrayList.metaClass.compareTo = {arg -> this?.size() <=> arg?.size() } 
    [1]<=>[2] 

例外がまだありますがgroovy.lang.GroovyRuntimeException: Cannot compare java.util.ArrayList with value '[1]' and java.util.ArrayList with value '[2]'

答えて

0

を上昇し、あなたがそれをやりたいんなぜ私が...尋ねるべき?
比較演算子は、compareToメソッドだけでなく、Comparableを実装しているクラスに依存しています。そのインタフェースを既存のクラスに強制することはできません。
afaik、別の方法が必要です

1

1つの方法はComparatorインターフェイスを実装することです。

もう一つは、あなたが望んでいたようListComparableを実装していないので、しかし、あなたは<=>演算子を使用することはできませんmetaClassを使用することです。

List.metaClass.compareTo = { Collection other -> 
    delegate.size() <=> other?.size() 
} 

def x = [1, 2, 3] 
def y = [4, 5] 

println x.compareTo(y) // but x <=> y won't work 
+0

おかげで、armandinoを。 – guai

0

あなたは同等としてリストにマークを付けることができます。

List.metaClass.compareTo = { other -> 
    delegate[0] <=> other[0] 
} 
assert ([1,2] as Comparable) <=> ([3,4] as Comparable) == -1 
assert ([3,4] as Comparable) <=> ([1,2] as Comparable) == 1 
assert ([3,4] as Comparable) <=> ([3] as Comparable) == 0