我试图得到答案,但是关于比较器的每一个问题都涉及排序。
我试图使用一个比较器,其值从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那里弄到狗。
下面是我的主要活动方法
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));
        }
    }

最佳答案

不管你的目的是什么,这里是:

if (o1.getAge() > o2.getAge()) {
  return 1;
} else if (o2.getAge() > o1.getAge()) {
  return 2;
}

不正确。其思想是compareTo()返回负的、等于零的、正的结果。你没有必要决定你想改变这种方法的契约,说:1代表氧1大于氧;2代表氧1大于氧1。这个接口和那个方法有一个定义良好的契约,您只需坚持这个。除非你的目标是故意误导读者。但请放心,这会很快反咬你。
假设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)

10-04 12:47