在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>