我有一个包含文件列表的 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
- 比较逻辑
使用
Long.compare(timeStamp1.getTime(), timeStamp2.getTime());
正确比较两个长
数
- 日期模式
switch mm
--> MM
表示月份。
关于java - 无法使用 Collections(Java) 对文件名将包含时间戳的文件列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56892308/