【发布时间】:2021-04-06 07:01:28
【问题描述】:
我需要按日期对文件数组进行排序,日期是文件名的一部分,例如:"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();
}
}
我知道这里有很多需要解决的问题,但现在我想了解为什么会这样:
“比较方法违反了它的一般约定!”
【问题讨论】:
-
这能回答你的问题吗? What is the compare contract?
-
看起来日期和时间构成了整个名称(除了扩展名),并且格式看起来从大到小。字符串比较应该给出正确的结果。
-
@DarkMatter 格式不是从大到小,因为天早于几个月,但感谢您的输入
-
@PM77-1 感谢您的指点,现在我需要弄清楚我没有履行合同的哪一部分。我想这是平等的比较,就像有些人已经指出的那样
-
是的,我的错。应该更仔细地阅读。
标签: java arrays string sorting date