我已经用Google搜索并彻底检查了所有问题和答案。比较方法违反了其总合同"错误。我无法弄清楚情况出了什么问题。我编写了一个比较器类,有时会在CI中抛出此异常。我只在我的NumberStringComparator中使用Integer obj.compareTo方法,这个类在Arrays.sort方法中使用。
Arrays.sort(valuesArray, new NumberStringComparator());
班级代码
private static class NumberStringComparator implements Comparator<Object>
{
@Override
public int compare (Object entry1, Object entry2) {
if(!(entry1 instanceof String && entry2 instanceof String)){
throw new ClassCastException();
}
try{
Integer a1 = Integer.valueOf((String)entry1);
Integer a2 = Integer.valueOf((String)entry2);
return a1.compareTo(a2);
}
catch(Exception e){
try{
return ((String)entry1).compareTo((String)entry2);
}
catch(Exception e1){
throw new ClassCastException();
}
}
}
}
编辑: 使用的样本值(超过千个值)是:
1234567894,1234567893,1234567892,1234567891,1234567890,12345678949,491940032,491940033,12345678947,491940030,12345678948
答案 0 :(得分:2)
此解决方案的问题在于您的比较器不具有传递性。
很有可能你的数组中有三个元素A,B和C它们没有传递关系。
换句话说,当比较器不是传递时,你可以得到A> B和B&gt; C也是C> A.