私は困惑しています...このディレクトリツリーがあるとしましょう:
{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
に来るため、グローバルな基準では、すべてのディレクトリがすべてのファイルより前になるわけではありません。)
このディレクトリ ツリーを列挙し、サブディレクトリを再帰的に列挙すると、order2List<File>
の順序で次のようになります。
{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が必要です。Comparator を作成してそれを取得するにはどうすればよいですか?