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;
  }
});

现在我的年龄变量可能有一个值或客户的年龄。所有值都应附加在末尾,其余值应按升序或降序排序(一切正常)?

但是这段代码抛出了一个异常:

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

请告诉我应该怎么做?提前致谢。

4

2 回答 2

3

当且仅当 c.compare(e1, e2)==0 与 e1.equals(e2) 对于 >every S 中的 e1 和 e2。

参考链接

元素集必须一致。不一致的等号将表现得散乱。

于 2013-01-21T11:44:04.693 回答
1

您没有正确处理只有一个客户有年龄而另一个没有的情况。

此外,在其他情况下返回 1 似乎是不正确的。如果根据年龄没有差异,则返回 0 而不是 1。

于 2013-01-21T11:48:35.233 回答