2

次の文字列配列を考えてみましょう。これは、相対パスを持つファイル名のリストです。

String[] myArray = { "src\\kop\\cKOP_C.o"
                   , "src\\io\\cIO_S.o"
                   , "src\\io\\com\\cGA_M.o"
                   , "src\\io\\cADC.o"
                   , "src\\io\\cIO_H.o"
                   , "src\\io\\com\\com_m.o"
                   , "src\\io\\tab_s.o"
                   , "src\\kop\\cKOP" };

ディレクトリのレイアウトは次のとおりです。

src\io\cADC.o
src\io\cIO_H.o
src\io\cIO_S.o
src\io\tab_s.o
src\io\com\cGA_M.o
src\io\com\com_m.o
src\kop\cKOP_A.o
src\kop\cKOP_B.o

この配列を Java でソートして、次のような結果を得たいと考えています。

src\\io\\cADC.o
src\\io\\cIO_H.o
src\\io\\cIO_S.o
src\\io\\tab_s.o
src\\io\\com\\cGA_M.o
src\\io\\com\\com_m.o
src\\kop\\cKOP_A.o
src\\kop\\cKOP_B.o

現在、Array.Sort(myArray) を使用していますが、結果は次のようになります。

src\\io\\cADC.o
src\\io\\cIO_H.o
src\\io\\cIO_S.o
src\\io\\com\\cGA_M.o
src\\io\\com\\com_m.o
src\\io\\tab_s.o
src\\kop\\cKOP_A.o
src\\kop\\cKOP_B.o

ディレクトリ情報が必要なため、これは私が望んでいるものではありません。keep最初にディレクトリ内のすべてのファイルをリストし、サブディレクトリがある場合は、後でサブディレクトリ内のファイルをリストします。

配列を必要に応じて並べ替えるには Comparator() を実装する必要があることはわかっていますが、比較の背後にあるロジックがわかりません。

4

3 に答える 3

0

これを試して

    Arrays.sort(a, new Comparator<String>() {
        public int compare(String o1, String o2) {
            File f1 = new File(o1);
            File f2 = new File(o2);
            int c1 = f1.getParent().compareTo(f2.getParent());
            if (c1 > 0) {
                return 1;
            }
            if (c1 < 0) {
                return -1;
            }
            return f1.getName().compareTo(f2.getName());
        }
于 2013-06-03T14:42:49.347 に答える