Java 如何使用比较器<;对象>;用于升序、降序而不排序

Java 如何使用比较器<;对象>;用于升序、降序而不排序,java,android,comparable,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;

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

我正在尝试使用比较器,其值来自
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;
    }
}

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

if (o1.getAge() > o2.getAge()) {
  return 1;
} else if (o2.getAge() > o1.getAge()) {
  return 2;
}
这是不正确的。其思想是
compareTo()
返回负的、等于零的、正的结果。你自己决定改变这种方法的合同是没有意义的:1代表o1大于o2;o2大于o1时为2。这个接口和那个方法有一个定义良好的契约,您只需坚持这个契约即可。除非你的目标是故意误导你的读者。但请放心,这将很快对你产生负面影响

假设
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)

所以您想检查
dogsArray
中的狗的年龄是按升序排列还是按降序排列?否。Iam想检查狗的年龄是否大于先前的年龄或小于快速接受的年龄。作为记录:您可能想写一个关于调度程序异常的新的特定问题。我想这与这个问题的“核心”没有任何关系,所以我根本没有谈论这个问题。现在我如何在MainActivity中使用这个方法?Dog dog1=新狗():Dog dog2=新狗();dog2=dogsArray.get(dogposition.getAge();调用方法(dog2):我看到你看到了我的更新。但请注意:您必须注意一些细微的细节,例如:当两只狗的年龄相同时,您希望
isOlder()
返回什么?我的代码主要是为了启发人们如何做事情。我想给出下一条狗的年龄是大于1还是小于1的信息,例如dogage=11 Dogsage=12(更大),我会继续尝试,但如果你有时间,你可以编辑你的答案。不管怎样,谢谢你快速而漂亮的回答。我认为你接近这个错误的水平了。如果您有两个以上的狗对象,那么您不会开始编写复杂的If a>b,否则If b>c。。。代码。而是:将这些对象放入列表中;然后对列表进行排序。严肃地说:不要手动执行此类操作。对列表进行排序;当你从头到尾迭代列表时,你会得到升序;当你从头到尾迭代排序列表时,你得到的是降序。就是这么简单。我试着对它进行排序,但我的任务是在启动应用程序时得到5只狗(每只狗都是随机的),我在RecyclerView中声明了它们,下一个按钮我可以得到下一只狗,最多120只狗。我的任务是:至少有3只狗的年龄在上升/下降
Dog buddy = new Dog(...
Dog sparky = new Dog(...

if (buddy.isOlder(sparky)