我从上面得到了一个例外,我知道这里经常在SO上讨论。无论如何,其他人不会告诉我我的代码有什么问题。这些StyleAlbum只是音乐专辑。 getAdded()以毫秒为单位返回将其最后一首歌曲添加到Android的MediaStore中的时间(以毫秒为单位)。
这仅在某些设备上发生!

码:

public static List<StyleAlbum> sortAdded() {
    List<StyleAlbum> mAlbums = new ArrayList<>();
    mAlbums.addAll(Library.getAlbums());
    Collections.sort(mAlbums, new Comparator<StyleAlbum>() {
        @Override
        public int compare(StyleAlbum lhs, StyleAlbum rhs) {
            if (lhs.getAdded() > rhs.getAdded()) {
                return -1;
            } else return 1;
        }
    });
    return mAlbums;
}

最佳答案

您的比较器不考虑两个项目相等,即它永远不会返回零。您应该使用类似

return Integer.compare(lhs.getAdded(), rhs.getAdded());


否则,结果至少是不一致的,并且根据算法,甚至可能是完全错误的。在这种情况下,Tim sort(JDK中使用的算法)足够聪明,可以告诉您有错误。

注意:我比较了整数和Integer.compare而不是减法(感谢Louis Wasserman),以避免溢出错误

10-05 17:45