我从上面得到了一个异常(exception),我知道这里经常讨论这个异常(exception)。无论如何,其他人不会告诉我我的代码有什么问题。这些 StyleAlbum
只是音乐专辑。 getAdded()
以 int
形式返回最后一首歌曲添加到 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),以避免溢出错误
关于Java:比较方法违反了其一般契约,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35732659/