排序抛出java.lang.IllegalArgumentException:比较方法违反其一般约定
我有一个包含两个比较器的方法,用于按价格对项目进行排序 这在90%的情况下都很好,但有时它会在标题中抛出异常。有人知道为什么吗排序抛出java.lang.IllegalArgumentException:比较方法违反其一般约定,java,Java,我有一个包含两个比较器的方法,用于按价格对项目进行排序 这在90%的情况下都很好,但有时它会在标题中抛出异常。有人知道为什么吗 void sort( Collections.sort(masterList, new Comparator<Item>() { @Override public int compare(Item o1, Item o2) { try { if (o1.getPriceLevel() == 99
void sort(
Collections.sort(masterList, new Comparator<Item>() {
@Override
public int compare(Item o1, Item o2) {
try {
if (o1.getPriceLevel() == 999 && o1.getPriceLevel() < o2.getPriceLevel()) {
return 1;
}
if (o2.getPriceLevel() == 999) {
return -1;
}
return Double.compare(o1.getPriceLevel(), o2.getPriceLevel());
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
});
//Null pointer happens on the line below
Collections.sort(masterList, Collections.reverseOrder(new Comparator<Item>() {
@Override
public int compare(Item o1, Item o2) {
try {
if (o1.getPriceLevel() == 999 || o2.getPriceLevel() == 999) {
return 1;
}
return Double.compare(o1.getPriceLevel(), o2.getPriceLevel());
} catch (Exception e) {
e.printStackTrace();
return 0;
}
}
}));
}
这是Java7使用的TimSort算法中的一个检查,它验证您的比较器方法是否有效(例如symetric-a==b&&b==a) 您的equals大小写无效(返回0)-这取决于一个元素为null时参数的给定顺序。在执行任何其他操作之前,请尝试显式处理空值,例如:
if(o1 == null || o2 == null)
{
return 0;
}
请张贴stacktrace,以便轻松找到准确的引用类型,即
null
if(o1 == null || o2 == null)
{
return 0;
}