Groovy Custom Comparator

时间:2017-10-04 10:02:35

标签: sorting groovy

我试着弄清楚如何构建自定义Comparator。我发现了一个类似的question,但我仍然被卡住了。我想使用一些ArrayList对文件进行排序,例如:

我的档案:

 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']

我希望像这样建立一些想法:

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 个答案:

答案 0 :(得分: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) }