2017-05-02 5 views
2

私は答えを得ようとしますが、Comparatorsについてのあらゆる質問は並べ替えを扱います。Comparator <Object>を昇順に使用する方法並べ替えなしで降順で並べ替える

Imが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)); 
     } 
    } 
+1

そう...あなたはdogsArray' 'で犬の年齢がascendinglyまたは降順注文されているかどうかを確認したいですか? – Sweeper

+0

いいえ、私は犬の年齢が以前よりも大きいことを確認したいと思っています – Rodriquez

+0

早速受け入れていただきありがとうございます。そして、記録のために:そのスケジューラー例外に関する**新しい**の特定の質問を書いておきたいかもしれません。私はそれがこの質問の「中核」とは関係がないと思うので、私はそれについて全く話しませんでした。 – GhostCat

答えて

6

の私の方法ではありません。ここに:

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

が間違っています。考え方は、compareTo()が負の値を返し、等しい値を返します。肯定的な結果です。あなたは、そのメソッドの契約を次のように変更したいと自分で決めることはできません。 o1より古いo2の場合は2です。このインターフェイスとそのメソッドはと定義されており、それはと契約が明確に定義されています。あなたの目標があなたの読者を意図的に誤解させない限り。しかし、それはあなたに素早く噛み付くでしょう。

return Integer.compare(o1.getAge(), o2.getAge()) 

そしてトリックのような追加メソッドを定義することです:

例えば
public boolean isOlder(Dog other) { 
    return compareTo(this, other) > 0; 

getAge()戻ると、int型を言う、あなたは、単にでそれを置き換えると仮定すると

そして、あなたのようなことを使用します。

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

if (buddy.isOlder(sparky) 
+0

MainActivityでこのメソッドを使用する方法は? Dog dog1 = new Dog(): Dog dog2 = new Dog(); dog2 = dogsArray.get(dogposition).getAge(); dog1.callMethod(dog2): – Rodriquez

+0

私の更新を見ました。しかし注意してください:あなたは、両方の犬の年齢が同じ場合に 'isOlder()'が返すものは何でしょうか?私のコードは、主に物事を*できる方法を示すためのインスピレーションとして意味されます。 – GhostCat

+0

私は次の犬の年齢が1歳以下のとき、例えばdogage = 11 dogsage2 = 12(もっと大きい)というような情報を与えたいと思っています。 。とにかく、素早く素敵な答えをありがとう。 – Rodriquez

関連する問題