您现在的位置:首页行业资讯

Java8实现对List<Map<String,Object>>多条件排序--中享思途

之前发了一篇Java实现List<Map>排序的文章,使用的Comparator实现的,今天在开发中再次遇到需要进行排序的功能需求,想着最近一直在研究Java8的新特性,于是决定使用Java8 的语法来实现这个需求。
CSDN博主 知之可否的方案
1、建立实体类

青岛Java培训--中享思途

2、使用lamda表达式

青岛Java培训--中享思途

3、使用增强版的Comparator接口

青岛Java培训--中享思途

4、多条件排序

青岛Java培训--中享思途

我的方案
其实按照博主的方法建立实体类来使用Java 8 stream()新特性进行排序的方式应该是最合适的方式。无奈项目里由于受同事的影响,基本都不建立实体类,所有现在用起来必须用List<Map>来接受查询结果,导致使用stream()方法有点麻烦。感觉建实体类来使用Java 8 新特性会更方便一些。
最初的排序要求只需要对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”的方法查到结果一致。这个方式不行。

青岛Java培训--中享思途

在百度上搜了很多相关的博客,最终在博主知之可否的文章中找到灵感,修改为一下代码,实现功能需求。

青岛Java培训--中享思途

判断开始时间是否相同,不同的情况下按照开始时间排序,相同的情况下按照结束时间排序。
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培训哪家好,中享思途】

 st_bottom
青岛Java培训,青岛HTML5培训,青岛UI培训,青岛IT培训,青岛嵌入式培训,青岛运维培训,Java就业培训,专业ui培训,前端开发培训,嵌入式培训价格,运维培训哪家好,IT培训,青岛思途,中享思途IT培训
Copyright © 青岛思途共享科技信息服务有限公司 鲁ICP备14027489号-2

鲁公网安备 37021402000988号

青岛Java培训,青岛HTML5培训,青岛UI培训,青岛IT培训,青岛嵌入式培训,青岛运维培训,Java就业培训,专业ui培训,前端开发培训,嵌入式培训价格,运维培训哪家好,IT培训,青岛思途,中享思途IT培训