Java 形成来自两个不同文件夹的文件名的排序列表
我有两个目录作为最终文件列表的源。文件已编号,需要在文件名的最终ArrayList中进行排序Java 形成来自两个不同文件夹的文件名的排序列表,java,sorting,arraylist,file-io,Java,Sorting,Arraylist,File Io,我有两个目录作为最终文件列表的源。文件已编号,需要在文件名的最终ArrayList中进行排序 dir1/file1 dir1/file2 dir2/file3 dir1/file4 如何仅根据文件名而不是目录对ArrayList进行排序?要更改排序顺序,您可以使用集合实现自己的排序,并使用它更改默认顺序。排序(ArrayList,c) 以下示例按文件名按字典进行比较,忽略大小写差异: java.util.Comparator<String> c = new Comparator&l
dir1/file1
dir1/file2
dir2/file3
dir1/file4
如何仅根据文件名而不是目录对ArrayList进行排序?要更改排序顺序,您可以使用集合实现自己的排序,并使用它更改默认顺序。排序(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);
java.util.Comparator c=new Comparator(){
@凌驾
公共整数比较(字符串o1、字符串o2){
字符串f1=o1.substring(Math.max(0,o1.lastIndexOf(“/”),o1.length());
字符串f2=o2.substring(Math.max(0,o2.lastIndexOf(“/”),o2.length());
返回f1.compareToIgnoreCase(f2);
}
};
Collections.sort(arrayList,c);
这不是一个真正的答案,只是一个补充
比较器应始终按自然顺序排序(按字典顺序排列字符串,按升序排列数字)
一旦有了实现,并且希望更改顺序,就可以简单地替换
return 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()
并实现一个自定义的比较器
并传递给sort()方法。文件名是否总是以数字结尾?我从不同的图形过程中收集帧,因此这些文件的名称类似于frame000001.jpgVery interest。也许您可以将关键行缩短为filename=filename.substring(filename.lastIndexOf('/')+1);如果我们从右到左进行降序排序呢?这个把戏行得通吗?你说的“从右到左递减排序”是什么意思?这不是个好主意-数字排序作为字符串值。因为如果文件名以file22、file36结尾,上述代码行为就会改变。@bharat-True。这是一个词典排序的例子。
Arrays.sort(ar, Collections.reverseOrder(c));