没有调用比较器

时间:2017-07-07 22:16:22

标签: android

List<UserContribution> userContributions = new ArrayList<>();
...
Collections.sort(userContributions, new Comparator<UserContribution>() {
    @Override
    public int compare(UserContribution o1, UserContribution o2) {
        return o1.date.after(o2.date) ? -1 : o1.date.before(o2.date) ? 1 : 0;
    }
});

userContributions最终会有3个项目。 compare方法中设置的断点未被命中(并且Android Studio将其显示为非有效断点),因此我的项目未进行排序。为什么来?

谢谢!

1 个答案:

答案 0 :(得分:0)

我建议避免嵌套的三元操作,或者将compare方法委托给被比较的类。这使代码更具可读性,有助于避免比较中潜在的排序错误,并允许您在每个分支中插入断点以查看比较结果。

选项1:完全条件结构

public int compare(UserContributions o1, UserContributions o2) {
    if (o1.date.after(o2)) {
        return 1;
    else if (o1.date.before(o2)) {
        return -1;
    else {
        return 0;
    }
}

请注意,这是一种容易出错的方法,因为您依赖于date.before()date.after()正确模仿操作<>。我个人更喜欢选项2。

选项2:委派与日期的比较

public int compare(UserContributions o1, UserContributions o2) {
    return o1.date.compareTo(o2.date);
}

请注意,date.compare()方法将负责定义日期比较。