【Java基础·Comparator多字段排序】
【Java基础·Comparator多字段排序】
需求
对指定List按照 身份证号、姓名、入学时间倒序排列
版本1
package com.biaogexf.tools;import lombok.Data;import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;public class MultiFieldSortByComparatorTest {public static void main(String[] args) {List<User> usersList = new ArrayList<>();// 构建多个实例fillContent(usersList);// 输出列表printData(usersList);// 按照 身份证号、姓名、入学时间 倒序dataSort(usersList);// 查看排序后的列表printData(usersList);}private static void dataSort(List<User> usersList) {Collections.sort(usersList, new Comparator<User>(){@Overridepublic int compare(User obj1, User obj2) {int cr = 0;// 按身份证号降序排列int a = obj2.getIdNumber().compareTo(obj1.getIdNumber());if (a != 0) {cr = (a > 0) ? 3: -1;} else {// 按姓名降序排列a = obj2.getName().compareTo(obj1.getName());if (a != 0) {cr = (a > 0) ? 2: -2;} else {// 按入学时间降序排列a = obj2.getInfoDate().compareTo(obj1.getInfoDate());if (a != 0) {cr = (a > 0) ? 1: -3;}}}return cr;}});}private static void printData(List<User> usersList) {System.out.println("====================");for (User user : usersList) {System.out.println(user);}System.out.println("====================");}private static void fillContent(List<User> usersList) {User user1 = new User();user1.setIdNumber("1");user1.setName("11");user1.setInfoDate("111");usersList.add(user1);User user2 = new User();user2.setIdNumber("2");user2.setName("11");user2.setInfoDate("111");usersList.add(user2);User user3 = new User();user3.setIdNumber("2");user3.setName("22");user3.setInfoDate("222");usersList.add(user3);User user5 = new User();user5.setIdNumber("2");user5.setName("11");user5.setInfoDate("222");usersList.add(user5);}
}@Data
class User {/** 身份证号 */private String idNumber;/** 姓名 */private String name;/** 入学时间 */private String infoDate;
}
阿里巴巴规范:
1.Collections.sort可替换为List.sort
2.匿名Comparator()可替换为lambda表达式
版本2
package com.biaogexf.tools;import lombok.Data;import java.util.ArrayList;
import java.util.List;public class MultiFieldSortByComparatorTest {public static void main(String[] args) {List<User> usersList = new ArrayList<>();// 构建多个实例fillContent(usersList);// 输出列表printData(usersList);// 按照 身份证号、姓名、入学时间 倒序dataSort(usersList);// 查看排序后的列表printData(usersList);}private static void dataSort(List<User> usersList) {usersList.sort((obj1, obj2) -> {int cr = 0;// 按身份证号降序排列int a = obj2.getIdNumber().compareTo(obj1.getIdNumber());if (a != 0) {cr = (a > 0) ? 3 : -1;} else {// 按姓名降序排列a = obj2.getName().compareTo(obj1.getName());if (a != 0) {cr = (a > 0) ? 2 : -2;} else {// 按入学时间降序排列a = obj2.getInfoDate().compareTo(obj1.getInfoDate());if (a != 0) {cr = (a > 0) ? 1 : -3;}}}return cr;});}private static void printData(List<User> usersList) {System.out.println("====================");for (User user : usersList) {System.out.println(user);}System.out.println("====================");}private static void fillContent(List<User> usersList) {User user1 = new User();user1.setIdNumber("1");user1.setName("11");user1.setInfoDate("111");usersList.add(user1);User user2 = new User();user2.setIdNumber("2");user2.setName("11");user2.setInfoDate("111");usersList.add(user2);User user3 = new User();user3.setIdNumber("2");user3.setName("22");user3.setInfoDate("222");usersList.add(user3);User user5 = new User();user5.setIdNumber("2");user5.setName("11");user5.setInfoDate("222");usersList.add(user5);}
}@Data
class User {/** 身份证号 */private String idNumber;/** 姓名 */private String name;/** 入学时间 */private String infoDate;
}
输出
====================
User(idNumber=1, name=11, infoDate=111)
User(idNumber=2, name=11, infoDate=111)
User(idNumber=2, name=22, infoDate=222)
User(idNumber=2, name=11, infoDate=222)
====================
====================
User(idNumber=2, name=22, infoDate=222)
User(idNumber=2, name=11, infoDate=222)
User(idNumber=2, name=11, infoDate=111)
User(idNumber=1, name=11, infoDate=111)
====================
感悟
比较器Comparator中的compare方法定义的是排序的规则!!!
【Java基础·Comparator多字段排序】相关推荐
- java list按照某个字段排序_java相关:List对象去重和按照某个字段排序的实现方法...
java相关:List对象去重和按照某个字段排序的实现方法 发布于 2020-6-8| 复制链接 下面小妖就为大家带来一篇List对象去重和按照某个字段排序的实现方法.小妖觉得挺不错的,现在就分享给大 ...
- 【Java基础篇】集合排序
所谓集合排序是指对集合内的元素进行排序. 集合工具类Collections中提供了两种排序算法,分别是: Collections.sort(List list) Collections.sort(Li ...
- Java基础——Arrays类的排序方法
1.Arrays类的排序方法: public static void sort(类型[] a) //对数组进行默认升序排序 public static <T> void so ...
- Java基础程序——Set集合排序(四种写法)
对ArrayList集合中的6个学生对象进行去重并按照年龄从小到大的顺序排序 Set的特性是有序不重复,使用集合去重 对Set中的年龄属性进行比较 public class Demos {public ...
- [Java基础]比较器排序Comparator的使用
代码如下: package ComparablePack;public class Student {private String name;private int age;public Studen ...
- java中list元素排序_java list集合元素根据某些字段排序
一.jdk1.6的环境下 新建ComparatorSort类,并实现Comparator接口,重写compare方法 降序排序:o1的元素>o2的元素,并返回-1:o1的元素小于o2的元素,并返 ...
- java多字段排序,java8 stream多字段排序的实现
很多情况下sql不好解决的多表查询,临时表分组,排序,尽量用java8新特性stream进行处理 使用java8新特性,下面先来点基础的 List list; 代表某集合 //返回 对象集合以类属性一 ...
- list按照某个字段排序_恕我直言你可能真的不会java第7篇:像使用SQL一样排序集合
在开始之前,我先卖个关子提一个问题:我们现在有一个Employee员工类. @Data @AllArgsConstructor public class Employee {private Integ ...
- Java 8 Comparator: 列表排序
1.按字母顺序排序字符串列表 List<String> cities = Arrays.asList("Milan","london"," ...
最新文章
- html.partial mvc,MVC Html.Partial or Html.Action
- foreach php5.4,php5脚本升级 - foreach里面的foreach
- 精准扶贫谋定产业化-农业大健康·万祥军:东平农业品牌化
- C++模板类注意事项
- Sublime Text安装格式化xml的插件
- java多态的简单例子_要JAVA的简单例子,继承\多态的,详细讲解运行的每一步
- mysql 存储微信昵称乱码_MYSQL 保存微信昵称特殊字符报错解决方法-设置编码集为utf8mb4的方法...
- Tomcat虚拟根目录与虚拟目录
- 程序员应知——我们不是客户
- C语言程序设计题库附答案
- 〖Python 数据库开发实战 - MySQL篇㉒〗- 子查询的语法规则
- WMS系统-库位准确率与单位面积存储率-北京东勤科技
- linux如何查找交换机网址,亚美am8网址-官网首页
- jQuery实现广告图片轮播切换
- 基于Bootstrap的下拉框多选 Bootstrap Multiselect 插件使用
- Socket中文乱码
- 【C语言中如何表示无穷大】
- 北京小汽车出行比例首次下降
- 亚信安全防毒墙网络版客户端无密码退出、卸载
- ESP32设备驱动-SHT11温度湿度传感器驱动
热门文章
- 华硕主板1080ti显卡安装Ubuntu双系统
- 基于微平面理论的BRDF模型(PBR材质、Cook-Torrance、GGX)
- html5可折叠面板,纯CSS3炫酷3D折叠面板动画特效
- 【AIGC】Photoshop AI Beta版本安装使用(永久免费)
- 电子产品手绘设计视频教程 立体图草绘教程
- prettier 配置
- 2021年中国二次元游戏行业发展现状分析:销售收入达284.25亿元,同比增长27.43%[图]
- 编程第一法则:如果你的代码以奇怪的方式运行起来了,那么千万不要再去动它了...
- mysql索引优化 - 多表关联查询优化
- 微信h5页面下载app —— 安卓直接下载apk文件包,IOS跳转AppStore的实现代码