如何使用Comparator <Object>进行升序,降序而不进行排序

Rod*_*uez 2 java android comparable

我尝试得到一个答案,但有关比较器的每个问题都涉及排序.

我试图使用带有值的比较器 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

在主要活动中,我尝试比较狗,但我认为问题是我不知道如何结束这种方法,

我也有一个错误: 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));
        }
    }
Run Code Online (Sandbox Code Playgroud)

Gho*_*ica 6

无论您的用途是什么; 这里:

if (o1.getAge() > o2.getAge()) {
  return 1;
} else if (o2.getAge() > o1.getAge()) {
  return 2;
}
Run Code Online (Sandbox Code Playgroud)

是不正确的.这个想法是compareTo()回报负,等于零,积极的结果.在决定你自己想要改变该方法的合同时,没有必要说:1比o2早o1; o2比o1早o2.这个界面和那个方法有一个明确定义的契约,你只需坚持下去.除非你的目标是故意误导你的读者.但请放心,这会很快回复你.

假设getAge()返回,比如说int,你只需将其替换为:

 return Integer.compare(o1.getAge(), o2.getAge())
Run Code Online (Sandbox Code Playgroud)

然后诀窍是定义其他方法,例如:

public boolean isOlder(Dog other) {
  return compareTo(this, other) > 0;
Run Code Online (Sandbox Code Playgroud)

例如.

你使用它像:

Dog buddy = new Dog(...
Dog sparky = new Dog(...

if (buddy.isOlder(sparky)
Run Code Online (Sandbox Code Playgroud)