java - 为什么 Collections.sort 按相反顺序会导致排序不完整?

标签 java android list sorting

我有一个文件列表,我正在尝试按最近修改日期到最近修改日期的顺序对这些文件进行排序。日期存储为长值(自纪元以来的毫秒数),我使用 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/

相关文章:

java - 在Spring中按顺序实例化bean?

java - 为什么框架不显示?

android - 动态加载布局或选项

安卓。 retrofit 2 beta-4。获取错误字符串正文

java - 当我删除一个项目时,回收站查看列表修改所有项目

c - 如何使用带有双指针变量(没有支持变量)的结构字段?

java - 如何在Servlet中找到监听器?

java - 泛型实现 Map.entrySet() 时遇到问题

c# - 最新版本的 Unity 和 Google 无法生成 APK 构建并显示 Android Manifestation 脚本错误

java - 如何在Java中复制除1个键之外的键值列表?