我有两个目录作为最终文件列表的来源。这些文件已编号,需要在文件名的最终ArrayList中进行排序。
dir1/file1
dir1/file2
dir2/file3
dir1/file4
如何根据文件名而不是目录对ArrayList进行排序?
答案 0 :(得分:3)
为了更改排序顺序,您可以实施自己的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);
答案 1 :(得分:1)
这不是一个真正的答案,只是添加到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));