2017-10-04 2 views
0

私はどのようにビルドカスタムComparatorを理解しようとします。私は同様のquestionを見つけましたが、私はまだ固執しています。私は、例えば、いくつかArrayList Sを使用してファイルをソートしたい:Groovyカスタムコンパレータ

私のファイルを:

def files = ['author/foo.pkb', 'author/foo.pks', 
'version/test1.pks', 'version/test1.pkb', 'Somethink/foo.sql'] 

マイオーダーリスト:

def my_order = ['version', 'author', 'somethink'] // 1 value 
def my_extension_order ['.pks', '.pkb'] 

そして、私はそのようsomethinkを構築したい:

def my_index = { x -> 
     return my_order.findIndexOf { x.contains(it) } 
    } 
def my_extension_order = { y -> 
     return my_extension_order.findIndexOf { y.contains(it) } 
    } 

files.sort { a, b -> my_index(a) <=> my_index(b) ?: a <=> b && // sort files and extension 

出力では、ファイルをソートしてmy_orderとし、my_extension_order。それはそのようになります。私は1つの一貫した出力を得るために2つのArrayList sが私のファイルをソートしたいfile.sortにまとめる

def = ['version/test1.pks', 'version/test1.pkb', 'author/foo.pks', 'author/foo.pkb', 
'Somethink/foo.sql'] 

を。だからこのようにコンパレータを構築するには?

答えて

1

これが行います。

def my_index = { x -> my_order.findIndexOf { x.contains(it) } } 
def my_extension_index = { y -> my_extension_order.findIndexOf { y.contains(it) } } 
files.sort { a, b -> my_index(a) <=> my_index(b) ?: (my_extension_index(a) <=> my_extension_index(b) ?: a <=> b) } 
関連する問題