Comparison method violates its general contract!] with root cause
时间: 2023-11-11 13:55:45 浏览: 196
java中排序报:Comparison method violates its general contract异常的解决
根据你提供的信息,报错"Comparison method violates its general contract!"是因为你的比较器在某些情况下没有满足比较器的自反性、传递性和对称性的要求。具体来说,你的比较器没有正确处理两个变量都为null的情况,导致了排序出错。
你可以通过在比较器中添加额外的判断条件来解决这个问题。当两个变量都为null时,应该返回0,表示两个变量相等。修改后的代码如下所示:
```java
public Comparator<ZcglZlcgsyl> down = new Comparator<ZcglZlcgsyl>() {
@Override
public int compare(ZcglZlcgsyl o1, ZcglZlcgsyl o2) {
if (o1.getZlcgsyl() == null && o2.getZlcgsyl() == null) {
return 0;
}
if (o1.getZlcgsyl() == null) {
return 1;
}
if (o2.getZlcgsyl() == null) {
return -1;
}
return o2.getZlcgsyl().compareTo(o1.getZlcgsyl());
}
};
```
这样修改后,你的比较器将满足比较器的要求,不再报错了。
阅读全文