0

ユーザー定義クラスのリストがあります。

class Customer{
  Integer age;
  String name;
  //getter & setter
}


Collections.sort(customerList, new Comparator <Customer>() {        
  public int compare(Customer o1, Customer o2) {
    // TODO Auto-generated method stub              
    if(o1.getAge()!=null && o2.getAge() != null)
        return o1.getDistance().compareTo(o2.getDistance());
    else
      return 1;
  }
});

これで、年齢変数にnull値または顧客の年齢が含まれる可能性があります。すべてのnull値を最後に追加し、残りの値を昇順または降順で並べ替える必要があります(何でも問題ありません)。

しかし、このコードは例外をスローしています:

java.lang.IllegalArgumentException: Comparison method violates its general contract!

どうしたらいいか教えてください。前もって感謝します。

4

2 に答える 2

3

要素のセット S にコンパレータ c によって課される順序付けは、c.compare(e1, e2)==0 が e1.equals(e2) と同じブール値を >every に対して持つ場合にのみ、equals と一致すると言われます。 S の e1 と e2。

参照 -リンク

要素セットは一貫している必要があります。一貫性のないイコールは、不安定に動作します。

于 2013-01-21T11:44:04.693 に答える
1

顧客の 1 人だけが年齢を持ち、もう 1 人は年齢を持っていないというケースを正しく処理していません。

また、else-situation で 1 を返すのは正しくないようです。年齢による差がない場合は、1 ではなく 0 を返します。

于 2013-01-21T11:48:35.233 に答える