❤️作者主页:温文尔雅的清欢渡
❤️ 近期学习方向:性能调优
❤️欢迎 点赞 👍 收藏 ⭐ 留言 📝 关注 ✌ 私聊我
前言
工作中,会遇见对list对象进行排序的情况。
JAVA8用lamda表达式和增强版Comparator进行排序
List<Project> list = projectMapper.queryProjectDetailByCode(body.getProjectCode());
一、单条件排序
- 升序
list.sort(Comparator.comparing(Project::getId));
- 降序
list.sort(Comparator.comparing(Project::getId).reversed());
二、多条件排序
- 升序+升序
先按id升序,当id相同时,再按money升序
list.sort(Comparator.comparing(Project::getId).thenComparing(Project::getMoney));
- 降序+降序
先按id降序,当id相同时,再按money降序
list.sort(Comparator.comparing(Project::getId).thenComparing(Project::getMoney).reversed());
- 升序+降序
先按id升序,当id相同时,再按money降序
list.sort(Comparator.comparing(Project::getId).reversed().thenComparing(Project::getMoney).reversed());
- 降序+升序
先按id降序,当id相同时,再按money升序
list.sort(Comparator.comparing(Project::getId).reversed().thenComparing(Project::getMoney));
三、分页处理
//dtoList -> 当前页所有数据
List<ProjectDTO> dtoList = list.stream().skip((pageNo - 1) * pageSize).limit(pageSize).collect(Collectors.toList()));
//总条数
dto.setPages(pageNo);
dto.setTotal(list.size());
dto.setList(dtoList);
skip:跳过n个元素,limit裁剪大小,pageNo 当前页,pageSize当前页大小。
四、空值处理
当排序的属性值为null时,需要特殊处理,否则会报java.lang.NullPointerException
- 升序时,属性值为空排前面
list.sort(Comparator.comparing(Project::getId,Comparator.nullsFirst(Integer::compareTo)));
2.升序时,属性值为空排后面
list.sort(Comparator.comparing(Project::getId,Comparator.nullsLast(Integer::compareTo)));
- 降序时,属性值为空排到后面
list.sort(Comparator.comparing(Project::getId,Comparator.nullsFirst(Integer::compareTo)).reversed());
- 降序时,属性值为空排到前面
list.sort(Comparator.comparing(Project::getId,Comparator.nullsLast(Integer::compareTo)).reversed());