我有一个文件列表,我正在尝试按最近修改日期到最近修改日期的顺序对这些文件进行排序。日期存储为长值(自纪元以来的毫秒数),我使用 Collections.sort 对文件进行排序。我希望文件从最近到最近(从上到下),因此我在比较器中执行了 R2-R1 而不是 R1-R2。我使用的代码如下所示:
Collections.sort(temp, new Comparator<RecordingFile>() {
@Override
public int compare(RecordingFile R1, RecordingFile R2) {
int x = (int) (R2.getLastModfied()-R1.getLastModfied());
return Integer.compare(x, 0);
}
});
这段代码的结果如下:
14-04-2022
10-04-2022
06-04-2022
05-04-2022
20-03-2022
...
18-04-2022
18-04-2022
17-04-2022
列表的排序在某种程度上是正确的,但同时也是错误的。这些文件是按部分而不是全部排序的。我尝试在订购之前对列表进行洗牌,结果导致了不同的顺序,但仍然具有相同的行为(已订购但部分)。为了解决这个问题,我在比较器中执行了 R1-R2,然后反转排序列表。这导致了一个完全排序的列表,考虑了列表中的所有项目。
我想知道是否有人知道为什么会发生这种情况?
最佳答案
就像评论中一样,尝试使用 Comparator.comparing(RecordingFile::getLastModfied).reversed()
而不是手动执行。
如果您决定仍然手动执行此操作,请检查 lastModfied
类型,因为如果它是 long
那么您不应该将比较的最终结果返回为 int
关于java - 为什么 Collections.sort 按相反顺序会导致排序不完整?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71911303/