环境
java:1.7
前言
本来是不想写这篇的,但是最近老报这个错误,一开始,我以为解决了,后来发现不是那么回事
现在特意记录下
我的排序代码
我先贴出完整的排序代码:
/**
* 支持两个字段排序
* @param result
* @param order
* @param orderType
* @param twoOrder 第二排序字段
* @param twoType 第二排序顺序
* @return
* @author yutao
* @date 2018年5月24日下午3:00:03
*/
public static List
分析
在JDK7以后,实现Comparable接口后,要满足一下三个特性:
1) 自反性:x,y 的比较结果和 y,x 的比较结果相反。
2) 传递性:x>y,y>z,则 x>z。
3) 对称性:x=y,则 x,z 比较结果和 y,z 比较结果相同。
而我的代码中,因为有对象属性为null的判断,所以有下面这样的代码:
public static Integer commonOrder(final String orderKey, final Integer oType, Object obj1, Object obj2, String twoOrder, Integer twoType) {
if (obj1 == null) {
if(oType < 0){
return -oType;
}
return oType;
}
if (obj2 == null) {
if(oType < 0){
return oType;
}
return -oType;
}
这样的话,是不满足对称性的;
因为必须完善为null
的情况:
public static Integer commonOrder(final String orderKey, final Integer oType, Object obj1, Object obj2, String twoOrder, Integer twoType) {
if(obj1 == null && obj2 == null){
return 0;
}
if (obj1 == null) {
if(oType < 0){
return -oType;
}
return oType;
}
if (obj2 == null) {
if(oType < 0){
return oType;
}
return -oType;
}
有了上面的代码,就满足对称性了。
参考地址:
https://www.cnblogs.com/wendelhuang/p/7356797.html