Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sorting Groovy自定义比较器_Sorting_Groovy - Fatal编程技术网

Sorting Groovy自定义比较器

Sorting Groovy自定义比较器,sorting,groovy,Sorting,Groovy,我试图找出如何构建自定义比较器。我找到了一个类似的,但我还是被卡住了。我想使用一些ArrayLists对文件进行排序,例如: 我的文件: def files = ['author/foo.pkb', 'author/foo.pks', 'version/test1.pks', 'version/test1.pkb', 'Somethink/foo.sql'] 我的订单清单: def my_order = ['version', 'author', 'somethink'] // 1 val

我试图找出如何构建自定义
比较器
。我找到了一个类似的,但我还是被卡住了。我想使用一些
ArrayList
s对文件进行排序,例如:

我的文件:

 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
def = ['version/test1.pks', 'version/test1.pkb', 'author/foo.pks', 'author/foo.pkb', 
'Somethink/foo.sql']
file.sort中进行汇总
我想按2
ArrayList
s对我的文件进行排序,以获得一个一致的输出。那么,如何构建一个比较器来实现这一点呢?

这将实现:

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) }
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)?:ab)}
这样做可以:

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) }
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)?:ab)}