我需要按日期对文件数组进行排序,日期是文件名的一部分,例如: "20200611_2130.dat"
. 我试着用:
Arrays.sort(files,new FileNameComparator());
public class FileNameComparator implements Comparator<File> {
private static SimpleDateFormat formatter =
new SimpleDateFormat("YYYYddMM_HHmm");
@Override
public int compare(File a, File b) {
try {
return asTime(a.getName()) > asTime(b.getName()) ? 1 : -1;
} catch (ParseException e) {
e.printStackTrace();
}
return 0;
}
private static long asTime(String filename) throws ParseException {
return formatter.parse(
filename.substring(0, filename.lastIndexOf("."))).getTime();
}
}
我知道这里有很多问题需要解决,但现在我想知道为什么我会得到:
“比较法违反了它的总承包合同!”
3条答案
按热度按时间nuypyhwy1#
@bertolla你需要加一个等号。如果等于,则返回0,否则返回-1。然后做一个更大或更小的比较案例。
xtupzzrd2#
当a==b时,比较器不工作。它必须返回0。您当前的实现返回-1。您应该考虑a==b的情况,如果为true,则返回0,然后处理文件名不同的情况。
vulvrdjw3#
代码审查:
把图案改成
"yyyyddMM_HHmm"
如果20200611_2130.dat
是Fri Nov 06 21:30:00
.你应该把东西放在箱子里
catch
例如,块Long.MIN_VALUE
.如果文件名不是日期,则添加第二个比较器,例如compare as strings。
您的代码可能如下所示:
输出: