我尝试得到一个答案,但有关比较器的每个问题都涉及排序。
我尝试使用具有dog.getAge()
我的班级看起来像
public final class Dog implements Comparator<Dog>{
...
@Override
public int compare(Dog o1, Dog o2) {
if (o1.getAge() > o2.getAge()) {
return 1;
} else if (o2.getAge() > o1.getAge()) {
return 2;
}
return 0;
}
}
在主要活动中,我尝试比较狗,但我认为问题是我不知道如何结束这种方法,
我也遇到了错误:Fatal Exception thrown on Scheduler.
我想从api那里得到狗。
所以这是我在MainActivity中的方法
private List<Dog> dogsArray = new ArrayList<>();
private void checkAscendingOrDescendingDogsAge() {
Dog dog= new Dog();
for (int i = 0; i < dogsArray.size(); i++) {
dog.compare(dogsArray.get(i), dogsArray.get(i + 1));
}
}
答案 0 :(得分:6)
无论您的用途是什么;在这里:
if (o1.getAge() > o2.getAge()) {
return 1;
} else if (o2.getAge() > o1.getAge()) {
return 2;
}
不正确。我们的想法是compareTo()
返回负数,等于零,为正结果。在决定你自己想要改变该方法的合同时,没有必要说:1比o2早o1; o2比o1早o2。这个界面和那个方法有一个明确定义的合约,你只需坚持下去。除非你的目标是故意误导你的读者。但请放心,这会很快回复你。
假设getAge()
返回,比如说int,你只需将其替换为:
return Integer.compare(o1.getAge(), o2.getAge())
然后技巧是定义其他方法,例如:
public boolean isOlder(Dog other) {
return compareTo(this, other) > 0;
例如。
你使用它就像:
Dog buddy = new Dog(...
Dog sparky = new Dog(...
if (buddy.isOlder(sparky)