我从上面得到了例外,我知道这里经常讨论SO。无论如何,其他人不会告诉我我的代码有什么问题。这些StyleAlbum
只是音乐专辑。 getAdded()
将他们的最后一首歌曲添加到Android的MediaStore中的时间以毫秒为单位返回int
。
这只发生在某些设备上!
代码:
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;
}
答案 0 :(得分:1)
您的比较器不会考虑两个相等的项目,即它永远不会返回零。你应该使用像
这样的东西return Integer.compare(lhs.getAdded(), rhs.getAdded());
否则结果至少是不一致的,并且根据算法,它甚至可能完全错误。在这种情况下, Tim sort (JDK中使用的算法)足够聪明,可以告诉您存在错误。
注意:我将整数与Integer.compare
进行比较而不是减法(感谢Louis Wasserman)以避免溢出错误
答案 1 :(得分:0)
如果两个值相同,则应在compare方法中返回0。特别是,从对象到自身的比较应该给出0。