下面是错误日志
java.lang.IllegalArgumentException: Comparison method violates its general contract!
at java.util.TimSort.mergeHi(TimSort.java:899)
at java.util.TimSort.mergeAt(TimSort.java:516)
at java.util.TimSort.mergeCollapse(TimSort.java:439)
at java.util.TimSort.sort(TimSort.java:245)
at java.util.Arrays.sort(Arrays.java:1498)
at java.util.ArrayList.sort(ArrayList.java:1470)
at java.util.Collections.sort(Collections.java:201)
出现问题的原因是使用 Collections.sort()排序的结果处理没有考虑全面,要对所有结果都做处理,官方解释说的是不严谨!
下面是正确代码
下面是解决好的代码!
// 排序
Collections.sort(searchInfoBean.getCustomerList(), new Comparator<FinanceSearchInfoBean.CustomerInfo>() {
@Override
public int compare(FinanceSearchInfoBean.CustomerInfo o1, FinanceSearchInfoBean.CustomerInfo o2) {
if (o1.getCustomerNameFirstPinYin().equals("#")) {
if (o2.getCustomerNameFirstPinYin().equals("#")) {
//两个都是# 对比大小
return o1.getCustomerNamePinYin().compareTo(o2.getCustomerNamePinYin());
} else {
//第一个# 第二个不是# 返回-1 不换位置
return -1;
}
} else {
if (o2.getCustomerNameFirstPinYin().equals("#")) {
//第一个不是# 第二个是# 直接换位置 返回1
return 1;
} else {
//两个都不是# 进行对比
return o1.getCustomerNamePinYin().compareTo(o2.getCustomerNamePinYin());
}
}
}
});