1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Java8使用Comparator.comparing根据不同状态进行自定义排序

Java8使用Comparator.comparing根据不同状态进行自定义排序

时间:2021-12-14 00:24:26

相关推荐

Java8使用Comparator.comparing根据不同状态进行自定义排序

Java8使用paring根据不同状态进行自定义排序

场景:对字符串格式的不同“状态”进行排序,一开始想到使用SQL语句的order by if排序,如果是使用mybatis操作数据库的话是没有问题的,直接可以在SQL上进行排序。但是我用的是公司自己封装的数据库,使用order by if 有些会导致SQL查询排序是OK的,但是返回的json并没有排序,那如何对返回的数据进行排序呢?

为了解决这个问题,也查了很多资料,大多数是使用年龄、分数或者名字字母进行排序,并没有我想要的根据不同状态的字符串形式来自定义排序。最后,也是找到了某位博主的文章解决了这个问题,文章地址如下:/zjy15203167987/article/details/88246482

在SQL中使用order by if()排序是没问题的,但是返回的json数据就没有进行排序。

select * where 1 = 1 order by if (exec_status='执行中', 0, 1),if (exec_status='待执行', 0, 2), if (exec_status='待审核', 0, 3), if (exec_status='未到期', 0, 4), if (exec_status='已审核', 0, 5), if (exec_status='已过期', 0, 6)

在Java代码中使用paring进行自定义排序,传入原有未排序数据,返回已排序数据。

/*** 说明:* workOrders排序前原有数据* workOrderList 排序后最终数据* statusList排序状态顺序*/private List<WorkOrder> getListSort(List<WorkOrder> workOrders) {List<WorkOrder> workOrderList = new ArrayList<>(); //用来存放新的排好序的数据//状态排序顺序List<String> statusList = Arrays.asList("执行中", "待执行", "待审核", "未到期", "已审核", "已过期");workOrders.stream().sorted(paring(WorkOrder::getExecStatus, (x, y) -> {if (x == null && y != null) {return 1;} else if (x != null && y == null) {return -1;} else if (x == null) {return -1;} else {//按照读取的statusList顺序排序for (String sort : statusList) {if (sort.equals(x) || sort.equals(y)) {if (x.equals(y)) {return 0;} else if (sort.equals(x)) {return -1;} else {return 1;}}}return 0;}//先状态排序,状态相同就按照创建时间降序排序}).thenComparing(paring(WorkOrder::getExecStatus).thenComparing(paring(WorkOrder::getCreateTime).reversed())) //reversed降序).collect(Collectors.toList()).forEach(x -> {WorkOrder w = new WorkOrder();BeanUtil.copyProperties(x, w);workOrderList.add(w); //将排好序的数据保存到workOrderList中});workOrderList.forEach(System.out::println); //遍历输出数据return workOrderList;}

测试输出的数据如下,正好是自己想要的顺序结果:

WorkOrder(id=956126093242580992, name=测试-执行中-0323, planId=956126067653132288, planName=测试-执行中, execStatus=执行中, createTime=Wed Mar 23 09:43:44 CST , ......)WorkOrder(id=956125918088445952, name=测试-待执行-0323, planId=956125881757384704, planName=测试-待执行, execStatus=待执行, createTime=Wed Mar 23 09:43:02 CST , ......)WorkOrder(id=956125708180307968, name=测试-已过期-0323, planId=956125680980246528, planName=测试-已过期, execStatus=待执行, createTime=Wed Mar 23 09:42:12 CST , ......)WorkOrder(id=956126393881903104, name=测试-待审核-0323, planId=956126369114537984, planName=测试-待审核, execStatus=待审核, createTime=Wed Mar 23 09:44:56 CST , ......)WorkOrder(id=956125340469870592, name=测试-未到期-0326, planId=956125285717426176, planName=测试-未到期, execStatus=未到期, createTime=Wed Mar 23 09:40:45 CST , ......)WorkOrder(id=956126638913142784, name=测试-已审核-0323, planId=956126615492149248, planName=测试-已审核, execStatus=已审核, createTime=Wed Mar 23 09:45:54 CST , ......)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。