我有兩個目錄作爲最終文件列表的來源。這些文件被編號並需要在文件名的最後一個ArrayList中進行排序。形成來自兩個不同文件夾的文件名的排序列表
dir1/file1
dir1/file2
dir2/file3
dir1/file4
如何基於文件名而不是目錄對ArrayList進行排序?
我有兩個目錄作爲最終文件列表的來源。這些文件被編號並需要在文件名的最後一個ArrayList中進行排序。形成來自兩個不同文件夾的文件名的排序列表
dir1/file1
dir1/file2
dir2/file3
dir1/file4
如何基於文件名而不是目錄對ArrayList進行排序?
爲了更改排序順序,您可以實現您自己的Comparator並使用它來更改默認順序,使用Collections.sort(arrayList, c)
。
下面的示例文件名不考慮大小寫字母順序比較:
java.util.Comparator<String> c = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
String f1 = o1.substring(Math.max(0, o1.lastIndexOf("/")), o1.length());
String f2 = o2.substring(Math.max(0, o2.lastIndexOf("/")), o2.length());
return f1.compareToIgnoreCase(f2);
}
};
Collections.sort(arrayList, c);
這是不是一個真正的答案,只是除了Lee-Falcon's correct answer。
比較器應該總是按照自然順序排序(這對字符串是字典順序的,對數字是上升的)。
一旦你實現你想要更改順序,您只需更換
return value;
與
return -1 * value;
但我會建議使用反向比較
Integer[] ar = { 1, 3, 2, 4};
Arrays.sort(ar); // sort with natural ordering
System.out.println(Arrays.toString(ar));
Arrays.sort(ar, Collections.reverseOrder()); // sort with reverse ordering
System.out.println(Arrays.toString(ar));
Collections.reverseOrder()
也接受比較器實例:
Arrays.sort(ar, Collections.reverseOrder(c));
使用'Collections.sort()'並實現一個自定義的'Comparator'並傳遞給sort()方法。 – YoungHobbit
文件名是否總是以數字結尾? – Bharatesh
我正在收集來自不同圖形過程的幀,所以這些文件被命名爲frame000001.jpg – GianniTee