2

私のAndroidアプリにはfileListがあり、これでソートします:

Collections.sort(fileList, new ItemFileNameComparator());

このリストをアルファベット順に並べ替えるには、次のコードを使用します。

    private class ItemFileNameComparator implements Comparator<Item> {
    public int compare(Item lhs, Item rhs) {
    return lhs.file.toLowerCase(Locale.GERMAN).compareTo(rhs.file.toLowerCase(Locale.GERMAN));
    }
}

しかし、これはすべてのアイテムをアルファベット順にソートします。最初にフォルダーをアルファベット順にソートし、次にファイルをアルファベット順にソートしたいと考えています。これを行う方法はありますか?ご協力ありがとうございました。

4

2 に答える 2

2

また、アイテムにはファイル名が含まれているだけだと考えました:

private class ItemFileNameComparator implements Comparator<File>{
    public int compare(Item lhsS, Item rhsS){
        File lhs = new File(lhsS.file.toLowerCase(Locale.GERMAN));
        File rhs= new File(rhsS.file.toLowerCase(Locale.GERMAN));
        if (lhs.isDirectory() && !rhs.isDirectory()){
            // Directory before File
            return -1;
        } else if (!lhs.isDirectory() && rhs.isDirectory()){
            // File after directory
            return 1;  
        } else {
            // Otherwise in Alphabetic order...
            return lhs.getName().compareTo(rhs.getName());
        }
    }
}
于 2014-06-25T09:30:14.550 に答える
1

Itemの変数ファイルは文字列だと思います。その場合は、示されているようにファイルに変更する必要があります。そうでない場合は、文字列をファイルに変換する必要がない場合があります。

private static class ItemFileNameComparator implements Comparator<Item> {
    public int compare(Item lhs, Item rhs) {
        File lhsFile = new File(lhs.file.toLowerCase(Locale.GERMAN));
        File rhsFile= new File( rhs.file.toLowerCase(Locale.GERMAN));

        String lhsDir = lhsFile.isDirectory()? lhsFile.getPath() : lhsFile.getParent();
        String rhsDir = rhsFile.isDirectory()? rhsFile.getPath() : rhsFile.getParent();

        int result =  lhsDir.toLowerCase().compareTo(rhsDir .toLowerCase());    

        if (result != 0) {
            return result;
        }else{              
            if(lhsFile.isDirectory()!= rhsFile.isDirectory()){
                return lhsFile.getParent().toLowerCase().compareTo( rhsFile.getParent().toLowerCase());
            }
            return lhsFile.getName().toLowerCase().compareTo( rhsFile.getName().toLowerCase());
        }
    }
于 2014-06-25T09:16:45.410 に答える