坑:
Comparison method violates its general contract!
Comparator的compare方法如何定义升序降序
枚举类
TOBESUBMIT("待提交",5),TOBEREVIEW("待审核",10),TOBECONFIRM("待确认",20),REJECTED("已拒绝",30),TOBEVISITE("可访问",40),VISITING("访问中",50),FINISH("已结束",60),CANCEL("已取消",70);
sort实现代码
/**
* 实现Comparator
*
* @param myList
*/
private void sortList(List<VisitorRecordInfoEntity> myList) {
//把 待审核 10, 排最前面
if (!CollectionUtils.isEmpty(myList)) {
//排序
Collections.sort(myList, new Comparator<VisitorRecordInfoEntity>() {
@Override
public int compare(VisitorRecordInfoEntity o1, VisitorRecordInfoEntity o2) {
if (o1 == null && o2 == null) {
return 0;
}
if (o1 == null) {
return -1;
}
if (o2 == null) {
return 1;
}
if (o1.getVisitorUserStatus() > o2.getVisitorUserStatus()) {
// 当方法的返回值大于0的时候就将前一个数和后一个数做交换
//除非 一个是已拒绝30 一个是可访问40,访问中50
if ((o1.getVisitorUserStatus() == 40 || o1.getVisitorUserStatus() == 50) && o2.getVisitorUserStatus() == 30) {
return -1;
}
//升序
return 1;
}
if (o1.getVisitorUserStatus() < o2.getVisitorUserStatus()) {
//除非 一个是已拒绝30 一个是可访问40,访问中50
if (o1.getVisitorUserStatus() == 30 && (o2.getVisitorUserStatus() == 40 || o2.getVisitorUserStatus() == 50)) {
return 1;
}
return -1;
}
if (o1.getVisitorUserStatus() == o2.getVisitorUserStatus()) {
if (o1.getCreatedTime().before(o2.getCreatedTime())) {
//时间早的排后面
// 当方法的返回值大于0的时候就将前一个数和后一个数做交换
return 1;
}
if (o2.getCreatedTime().before(o1.getCreatedTime())) {
//时间早的排后面
return -1;
}
return 0;
}
return 0;
}
});
}
}
不一定是最有写法,但一定不会报错O(∩_∩)O~情况写这么全面,稳!