簡體   English   中英

如何使用比較器 <Object> 用於升序,不排序而降序

[英]How to use Comparator<Object> for Ascending, Descending without sorting

我試圖得到一個答案,但是有關比較器的每個問題都涉及到排序。

我試圖將Comparator與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;
    }
}

在主要活動中,我嘗試比較狗,但我認為問題是Iam不知道如何結束這種方法,

我也收到一個錯誤: 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));
        }
    }

無論您的預期用途是什么; 這里:

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

是不正確的。 這個想法是compareTo()返回負的,等於零的正結果。 沒有必要自己決定要更改該方法的約定為:1對於o1早於o2; 大於o1的o2為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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM