Arraylist中的比较者

时间:2013-01-21 11:41:05

标签: java sorting

我有一个用户定义类的列表。

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!

请告诉我该怎么办? 提前谢谢。

2 个答案:

答案 0 :(得分:3)

  

当且仅当c.compare(e1,e2)== 0具有与e1.equals(e2)相同的布尔值时,比较器c对一组元素S施加的排序被认为与equals一致。对于&gt; S中的每个e1和e2。

参考 - link

元素集必须一致。不一致的等于将表现得很糟糕。

答案 1 :(得分:1)

如果只有一位客户有年龄而另一位客户没有年龄,则您没有正确处理这些案件。

另外,在else-situation中返回1似乎是不正确的。如果根据年龄没有差异,则返回0而不是1。