java - 无法使用 Collections(Java) 对文件名将包含时间戳的文件列表进行排序

标签 java sorting collections comparator

我有一个包含文件列表的 arrayList,其名称确实是时间戳。

List<File> fileList = new ArrayList<>();
fileList.add(new File("20190612221053"));
fileList.add(new File("20190512221303"));
fileList.add(new File("20190612221353"));
fileList.add(new File("20190512222303"));
fileList.add(new File("20190612221303"));

时间戳的格式是'yyyymmddHHssmm'。

我的目标是按照文件名中给出的时间戳的升序对该列表进行排序。

因此,我正在使用 Collections.sort 方法,如下所示:

Collections.sort(fileList, new Comparator<File>() {
    @Override
    public int compare(File file1, File file2) {
        Date timeStamp1=null,timeStamp2=null;
        try {
            timeStamp1 = new SimpleDateFormat("yyyymmddHHssmm").parse(file1.getName());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        try {
            timeStamp2 = new SimpleDateFormat("yyyymmddHHssmm").parse(file2.getName());
        } catch (ParseException e) {
            e.printStackTrace();
        }
        if(timeStamp1!=null && timeStamp2!=null && timeStamp1.getTime()!=timeStamp2.getTime() ) {
            return (timeStamp1.getTime() > timeStamp2.getTime()) ? 1 : -1;
        }
        else {
            return 0;
        }
    }
});

显然在这一行之后,您希望列表项(文件)按以下顺序排列:

[20190512221303, 20190512222303, 20190612221053, 20190612221303, 20190612221353]

但我得到的是订单:

[20190512221303, 20190612221303, 20190512222303, 20190612221053, 20190612221353]

显然出了点问题。 有人可以指出我哪里做错了吗。

最佳答案

代码主要有两个bug

  1. 比较逻辑

使用

Long.compare(timeStamp1.getTime(), timeStamp2.getTime());

正确比较两个

  1. 日期模式

switch mm --> MM 表示月份。

关于java - 无法使用 Collections(Java) 对文件名将包含时间戳的文件列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56892308/

相关文章:

java - Java中如何将Object的属性值转换为数组?

sorting - Powershell排序非常大的对象集合

java - 使用类属性搜索 Java 集合

java - Google Cal - 如何获取已完成/过去的事件

java - Itext 5.5 + Hwcrypto.js 添加签名 "Document has been altered or corrupted since it was signed"

java - 翻转存储卡游戏的卡片在 java 中不起作用(没有小程序)

javascript - 对字符串中的元素进行排序

algorithm - 词入二叉堆

ios - 对 NSDictionary 的 NSArray 进行排序...未完全正常工作

Java:无法更改迭代器列表