【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多字段排序】相关推荐

  1. java list按照某个字段排序_java相关:List对象去重和按照某个字段排序的实现方法...

    java相关:List对象去重和按照某个字段排序的实现方法 发布于 2020-6-8| 复制链接 下面小妖就为大家带来一篇List对象去重和按照某个字段排序的实现方法.小妖觉得挺不错的,现在就分享给大 ...

  2. 【Java基础篇】集合排序

    所谓集合排序是指对集合内的元素进行排序. 集合工具类Collections中提供了两种排序算法,分别是: Collections.sort(List list) Collections.sort(Li ...

  3. Java基础——Arrays类的排序方法

    1.Arrays类的排序方法: public static void sort(类型[] a)        //对数组进行默认升序排序 public static <T> void so ...

  4. Java基础程序——Set集合排序(四种写法)

    对ArrayList集合中的6个学生对象进行去重并按照年龄从小到大的顺序排序 Set的特性是有序不重复,使用集合去重 对Set中的年龄属性进行比较 public class Demos {public ...

  5. [Java基础]比较器排序Comparator的使用

    代码如下: package ComparablePack;public class Student {private String name;private int age;public Studen ...

  6. java中list元素排序_java list集合元素根据某些字段排序

    一.jdk1.6的环境下 新建ComparatorSort类,并实现Comparator接口,重写compare方法 降序排序:o1的元素>o2的元素,并返回-1:o1的元素小于o2的元素,并返 ...

  7. java多字段排序,java8 stream多字段排序的实现

    很多情况下sql不好解决的多表查询,临时表分组,排序,尽量用java8新特性stream进行处理 使用java8新特性,下面先来点基础的 List list; 代表某集合 //返回 对象集合以类属性一 ...

  8. list按照某个字段排序_恕我直言你可能真的不会java第7篇:像使用SQL一样排序集合

    在开始之前,我先卖个关子提一个问题:我们现在有一个Employee员工类. @Data @AllArgsConstructor public class Employee {private Integ ...

  9. Java 8 Comparator: 列表排序

    1.按字母顺序排序字符串列表 List<String> cities = Arrays.asList("Milan","london"," ...

最新文章

  1. html.partial mvc,MVC Html.Partial or Html.Action
  2. foreach php5.4,php5脚本升级 - foreach里面的foreach
  3. 精准扶贫谋定产业化-农业大健康·万祥军:东平农业品牌化
  4. C++模板类注意事项
  5. Sublime Text安装格式化xml的插件
  6. java多态的简单例子_要JAVA的简单例子,继承\多态的,详细讲解运行的每一步
  7. mysql 存储微信昵称乱码_MYSQL 保存微信昵称特殊字符报错解决方法-设置编码集为utf8mb4的方法...
  8. Tomcat虚拟根目录与虚拟目录
  9. 程序员应知——我们不是客户
  10. C语言程序设计题库附答案
  11. 〖Python 数据库开发实战 - MySQL篇㉒〗- 子查询的语法规则
  12. WMS系统-库位准确率与单位面积存储率-北京东勤科技
  13. linux如何查找交换机网址,亚美am8网址-官网首页
  14. jQuery实现广告图片轮播切换
  15. 基于Bootstrap的下拉框多选 Bootstrap Multiselect 插件使用
  16. Socket中文乱码
  17. 【C语言中如何表示无穷大】
  18. 北京小汽车出行比例首次下降
  19. 亚信安全防毒墙网络版客户端无密码退出、卸载
  20. ESP32设备驱动-SHT11温度湿度传感器驱动

热门文章

  1. 华硕主板1080ti显卡安装Ubuntu双系统
  2. 基于微平面理论的BRDF模型(PBR材质、Cook-Torrance、GGX)
  3. html5可折叠面板,纯CSS3炫酷3D折叠面板动画特效
  4. 【AIGC】Photoshop AI Beta版本安装使用(永久免费)
  5. 电子产品手绘设计视频教程 立体图草绘教程
  6. prettier 配置
  7. 2021年中国二次元游戏行业发展现状分析:销售收入达284.25亿元,同比增长27.43%[图]
  8. 编程第一法则:如果你的代码以奇怪的方式运行起来了,那么千万不要再去动它了...
  9. mysql索引优化 - 多表关联查询优化
  10. 微信h5页面下载app —— 安卓直接下载apk文件包,IOS跳转AppStore的实现代码