对文件列表、文件夹和文件进行排序,在Android中按字母顺序排列
在我的Android应用程序中,我有一个文件列表,并使用以下内容对其进行排序:对文件列表、文件夹和文件进行排序,在Android中按字母顺序排列,android,sorting,comparator,filelist,Android,Sorting,Comparator,Filelist,在我的Android应用程序中,我有一个文件列表,并使用以下内容对其进行排序: Collections.sort(fileList, new ItemFileNameComparator()); 要按字母顺序排列此列表,我使用以下代码: private class ItemFileNameComparator implements Comparator<Item> { public int compare(Item lhs, Item rhs) { retu
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));
}
}
私有类ItemFileNameComparator实现Comparator{
公共整数比较(项目lhs、项目rhs){
返回lhs.file.toLowerCase(Locale.GERMAN).compareTo(rhs.file.toLowerCase(Locale.GERMAN));
}
}
但这会按字母顺序对所有项目进行排序,我希望先按字母顺序对文件夹进行排序,然后再按字母顺序对文件进行排序。
有办法做到这一点吗?
谢谢您的帮助。我认为Item的变量文件是string。如果是这样,您必须将其更改为文件,如图所示。如果不是,您可能不需要将字符串转换为文件
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());
}
}
私有静态类ItemFileNameComparator实现Comparator{
公共整数比较(项目lhs、项目rhs){
File lhsFile=新文件(lhs.File.toLowerCase(Locale.derman));
File rhsFile=新文件(rhs.File.toLowerCase(Locale.derman));
字符串lhsDir=lhsFile.isDirectory()?lhsFile.getPath():lhsFile.getParent();
字符串rhsDir=rhsFile.isDirectory()?rhsFile.getPath():rhsFile.getParent();
int result=lhsDir.toLowerCase().compareTo(rhsDir.toLowerCase());
如果(结果!=0){
返回结果;
}否则{
if(lhsFile.isDirectory()!=rhsFile.isDirectory()){
返回lhsFile.getParent().toLowerCase().compareTo(rhsFile.getParent().toLowerCase());
}
返回lhsFile.getName().toLowerCase().compareTo(rhsFile.getName().toLowerCase());
}
}
我还认为该项仅包含文件名:
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());
}
}
}
私有类ItemFileNameComparator实现Comparator{
公共整数比较(项目lhsS、项目RHS){
File lhs=新文件(lhsS.File.toLowerCase(Locale.derman));
File rhs=新文件(rhsS.File.toLowerCase(Locale.derman));
if(lhs.isDirectory()&&!rhs.isDirectory()){
//文件前的目录
返回-1;
}如果(!lhs.isDirectory()&&rhs.isDirectory()){
//目录后的文件
返回1;
}否则{
//否则按字母顺序。。。
返回lhs.getName().compareTo(rhs.getName());
}
}
}
能否请您发布更多代码,例如Item类的源代码,如果您对要比较的对象的实现一无所知,我们将无法帮助您。。。