2017-10-04 116 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。它应该看起来像:

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

在总结file.sort我想2个ArrayList是我的文件进行排序,得到一个一致的输出。那么如何构建一个比较器来做到这一点?

回答

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) }