在Android中按字母顺序排序文件列表,文件夹然后文件

Posted

技术标签:

【中文标题】在Android中按字母顺序排序文件列表,文件夹然后文件【英文标题】:Sort Filelist, Folders then Files, both alphabetically in 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 类的来源,如果不了解要比较的对象的实现,我们无法为您提供帮助... 【参考方案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());
        
    

【讨论】:

以上是关于在Android中按字母顺序排序文件列表,文件夹然后文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 jquery 选择的下拉列表中按字母顺序重新排序 <options>

如何在C中按顺序对带有数字和字母的文件名进行排序?

在树状通用列表中按字母数字顺序对子项进行排序的扩展方法

如何在R中按字母顺序排序?

在C ++中按非ASCII顺序的第一个字母对字符串向量进行排序

双向链表中按字母顺序排序的链接