[英]Sort list of custom objects in Java using alphanumeric values
我有一個帶有getFolderName
方法的Folder
對象列表(返回一個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
檢查和其他健全性檢查等內容。 上面的代碼是理想化的,並假設這不是問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.