我很难过......假设我有这个目录树:
{someRoot}/
{someRoot}/bar/
{someRoot}/bar/file1.txt
{someRoot}/foo/
{someRoot}/foo/baz/
{someRoot}/foo/baz/file3.txt
{someRoot}/foo/abracadabra.txt
{someRoot}/foo/file2.txt
{someRoot}/aardvark.txt
{someRoot}/food.txt
{someRoot}/zebra.txt
你会注意到顺序。调用这个order1。在每个阶段,目录都排在文件之前。(注意: bar/file1.txt
在之前foo
,所以在全球范围内,目录并不都在所有文件之前。)
如果我枚举这个目录树,然后递归枚举子目录,我将得到以下内容List<File>
,排序为 order2。
{someRoot}/
{someRoot}/aardvark.txt
{someRoot}/bar/
{someRoot}/foo/
{someRoot}/food.txt
{someRoot}/zebra.txt
{someRoot}/bar/file1.txt
{someRoot}/foo/abracadabra.txt
{someRoot}/foo/baz/
{someRoot}/foo/file2.txt
{someRoot}/foo/baz/file3.txt
如果我创建简单的Comparator<File>
:
Comparator<File> fc = new Comparator<File>(){
@Override public int compare(File o1, File o2) {
return o1.compareTo(o2);
}
};
我排序,我从字典排序中得到这个排序(order3 ):
{someRoot}
{someRoot}/aardvark.txt
{someRoot}/bar
{someRoot}/bar/file1.txt
{someRoot}/foo
{someRoot}/food.txt
{someRoot}/foo/abracadabra.txt
{someRoot}/foo/baz
{someRoot}/foo/baz/file3.txt
{someRoot}/foo/file2.txt
{someRoot}/zebra.txt
但我不想要这种排序(有问题:注意food.txt
目录foo
及其子项之间),我想要order1。我怎样才能写一个比较器来得到我呢?