我有一个用户定义类的列表。
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!
请告诉我该怎么办? 提前谢谢。
答案 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。