从两个不同的文件夹中形成文件名的排序列表

时间:2016-01-05 05:25:48

标签: java sorting arraylist file-io

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

dir1/file1
dir1/file2
dir2/file3
dir1/file4

如何根据文件名而不是目录对ArrayList进行排序?

2 个答案:

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