之前发了一篇Java实现List<Map
CSDN博主 知之可否的方案
1、建立实体类
2、使用lamda表达式
3、使用增强版的Comparator接口
4、多条件排序
我的方案
其实按照博主的方法建立实体类来使用Java
8
stream()新特性进行排序的方式应该是最合适的方式。无奈项目里由于受同事的影响,基本都不建立实体类,所有现在用起来必须用List<Map
最初的排序要求只需要对start_time这个字段进行排序,于是我直接就在sql语句使用
"order by start_time
desc"就解决了。昨天负责现场测试的同事发现,单单只做start_time字段的排序时,在start_time相同的情况下,end_time就放飞自我,不是降序排列,导致前台表格展示时,时间顺序混乱了,因此要求我对end_time也进行降序排列。
第一想法就是在“order by start_time,end_time desc”,然而实际的结果是,先对start_time进行了降序排列,然后再对降序的结果按照end_time再进行降序排列,查询结果更加混乱。这个方案直接pass。
第二种方案是在Java代码进行排序。首先是利用Collections.sort进行两次排序如下图,然后发现结果同在sql中“order by start_time,end_time desc”的方法查到结果一致。这个方式不行。
在百度上搜了很多相关的博客,最终在博主知之可否的文章中找到灵感,修改为一下代码,实现功能需求。
判断开始时间是否相同,不同的情况下按照开始时间排序,相同的情况下按照结束时间排序。
list=list.stream().sorted((map1,map2)->{
if
(map1.get("start_time").equals(map2.get("start_time").toString())) {
return
map2.get("end_time").toString().compareTo(map1.get("end_time").toString());
}else {
return map2.get("start_time").toString().compareTo(map1.get("start_time").toString();
}
}).collect(Collectors.toList());
推荐阅读:
Java实现动态生成多级菜单的两种方式
Java 非对称加密算法实现登陆账号密码加密传输功能
【关键词:青岛Java培训,Java就业培训,学Java开发多少钱,Java培训哪家好,中享思途】