我正在使用eachFile(),但我试图颠倒迭代发生的顺序。我怎么做?现在,它似乎对文件列表进行排序,然后按排序顺序处理每个文件。我本质上想对该列表进行保留排序并从末尾开始。
问问题
9611 次
3 回答
11
我相信你不能改变 的顺序eachFile()
,但你可以达到预期的效果。
考虑:
new File("desired dir").listFiles().sort{ it.name }.reverse().each { def f ->
println f.name
}
于 2013-06-03T00:06:50.300 回答
1
您不能eachFile
直接使用,但使用listFiles
和手动排序执行此操作非常简单:
new File(path_to_file).listFiles().sort{a,b -> b.name <=> a.name}.each{ File f ->
println f.name
}
这里的关键sort{}
是倒置的。(如果您只使用reverse()
on listFiles()
,则无法保证来自文件系统的任何特定顺序 - 文件可能以特定于系统的顺序出现。)
请注意,该排序区分大小写——您可以像这样进行不区分大小写的排序:
new File(path_to_file).listFiles().sort{a,b -> b.name.compareToIgnoreCase(a.name)}.each{ File f ->
println f.name
}
在 Groovy 2.1.3 下测试。
于 2013-06-02T23:56:31.227 回答
1
我知道的最简单的方法是
def allFiles = new File('desired directory').listFiles()?.sort{a, b ->
-(a.name <=> b.name)
}
eachFile
不能sort
在闭包中使用。
显式使用的好处sort
是您可以根据排序标准对文件进行排序。例如,根据文件的lastModified
日期对文件进行排序:-
def allFiles = new File('desired directory').listFiles()?.sort{a, b ->
a.lastModified() <=> b.lastModified()
//to reverse sort on lastModified date use below
//-(a.lastModified() <=> b.lastModified())
}
于 2013-06-02T23:56:50.020 回答