我有两个目录作为最终文件列表的来源。这些文件被编号并需要在文件名的最后一个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