我从上面得到了一个例外,我知道这里经常在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),以避免溢出错误