我用Folder
方法获得了getFolderName
对象的列表(返回String
)。
我正在尝试对列表进行排序,但是由于某些文件夹名称以数字值开头,例如顺序,我遇到了顺序不正确的问题:
这是我的代码:
Collections.sort(folders, new Comparator<Folder>() {
@Override
public int compare(Folder folder1, Folder folder2) {
return Integer.compare(folder1.getFolderName(), folder2.getFolderName());
}
});
当前输出:
预期输出:
我在正确排序列表时缺少什么?
我认为您要在逻辑上首先按字母顺序比较文件夹名称,然后在两个文件夹具有相同名称的情况下,使用前导数字打破平局。我们可以尝试以下方法:
Collections.sort(folders, new Comparator<Folder>() {
@Override
public int compare(Folder folder1, Folder folder2) {
String f1 = folder1.getFolderName();
String f2 = folder2.getFolderName();
String f1name = f1.replaceAll("\\d+\\s+(.*)", "$1");
String f2name = f2.replaceAll("\\d+\\s+(.*)", "$1");
if (f1name.compareTo(f2name) != 0) {
return f1name.compareTo(f2name);
}
else {
int num1 = Integer.parseInt(f1.replaceAll("(\\d+)\\b.*", "$1"));
int num2 = Integer.parseInt(f2.replaceAll("(\\d+)\\b.*", "$1"));
return Integer.compare(num1, num2);
}
}
});
[请注意,我在多个地方省略了null
检查和其他健全性检查之类的内容。上面的代码是理想的,并且假定这不是问题。