【问题标题】:Sort Filelist, Folders then Files, both alphabetically in Android在Android中按字母顺序排序文件列表,文件夹然后文件
【发布时间】:2014-08-15 17:51:28
【问题描述】:

在我的 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));
    }
}

但这会按字母顺序对所有项目进行排序,我希望文件夹首先按字母顺序排序,然后文件按字母顺序排序。 有没有办法做到这一点? 感谢您的帮助。

【问题讨论】:

  • 能否请您发布更多代码,例如 Item 类的来源,如果不了解要比较的对象的实现,我们无法为您提供帮助...

标签: android sorting comparator filelist


【解决方案1】:

我还认为该项目仅包含文件名:

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());
        }
    }
}

【讨论】:

    【解决方案2】:

    我认为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());
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-03
      • 2011-08-19
      相关资源
      最近更新 更多