在我的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));
}
}
但是这会按字母顺序对所有项目进行排序,我希望首先按字母顺序排序文件夹,然后按字母顺序排序文件。 有没有办法做到这一点? 谢谢你的帮助。
答案 0 :(得分:2)
我还认为Item只包含文件名:
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());
}
}
}
答案 1 :(得分:1)
我认为Item的变量文件是string。如果是这样,您必须将其更改为File,如图所示。如果不是,您可能不需要将字符串转换为文件。
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());
}
}