Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 形成来自两个不同文件夹的文件名的排序列表_Java_Sorting_Arraylist_File Io - Fatal编程技术网

Java 形成来自两个不同文件夹的文件名的排序列表

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

我有两个目录作为最终文件列表的源。文件已编号,需要在文件名的最终ArrayList中进行排序

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));