运行环境:jdk1.8 jetty
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeLo(TimSort.java:747)
at java.util.TimSort.mergeAt(TimSort.java:483)
at java.util.TimSort.mergeCollapse(TimSort.java:410)
at java.util.TimSort.sort(TimSort.java:214)
at java.util.TimSort.sort(TimSort.java:173)
at java.util.Arrays.sort(Arrays.java:659)
at java.util.Collections.sort(Collections.java:217)
错误代码:
public int compare(Entry<String, Float> o1, Entry<String, Float> o2) {
if (o2.getValue() != null && o1.getValue() != null && o2.getValue().compareTo(o1.getValue()) > 0) {
return 1;
} else {
return -1;
}
return 1;
}
修改后代码如下:
public int compare(Entry<String, Float> o1, Entry<String, Float> o2) {
if (o2.getValue() != null && o1.getValue() != null ) {o2.getValue().compareTo(o1.getValue());
if(o2.getValue().compareTo(o1.getValue()) > 0){
return 1;
}else if(o2.getValue().compareTo(o1.getValue()) < 0){
return -1;
}else{
return 0;
}
} else {
return 0;
}
}
主要是添加了当两个值相等时返回0 ,错误就不报了。也许比较规则相等的时候设置成0就对了