作者:瓦斯的2010_217 | 来源:互联网 | 2023-10-11 00:15
在对list排序的时候可能会碰到两个数据维度的自定义排序
比如一组学生数据,有考试状态,要按照考试状态为未考试(考试状态 0 未考试 1 已通过 2 未通过)的排在前面,其他的状态按照考试时间降序排列。
实体类
@Data
@AllArgsConstructor
public class Student {private Integer id;private String name;/*** 考试状态 0 未考试 1 已通过 2 未通过*/private Integer status;/*** 考试时间*/@JSONField(format = "YYYY-mm-dd HH:mm:ss")private LocalDateTime timeOfTest;}
排序代码
public static void main(String[] args) {List list = new ArrayList();list.add(new Student(2, "Sherry", 1, LocalDateTime.parse("2022-05-19T12:34:56")));list.add(new Student(3, "Tom", 0,LocalDateTime.parse("2022-05-19T11:55:56")));list.add(new Student(1, "Tom", 2, LocalDateTime.parse("2022-05-19T15:34:56")));list.add(new Student(5, "Lily", 1, LocalDateTime.parse("2022-05-19T16:11:56")));list.add(new Student(4, "Alisa", 1,LocalDateTime.parse("2022-05-19T22:00:56")));List students=list.stream().sorted((p1,p2) ->{//如果状态等于0(未考试),按照考试状态升序排if (p1.getStatus().equals(0) || p2.getStatus().equals(0)){return p1.getStatus()-p2.getStatus();}else {return p2.getTimeOfTest().compareTo(p1.getTimeOfTest());}}).collect(Collectors.toList());System.out.println(JSON.toJSONString(students));}
输出结果
[{"id":3,"name":"Tom","status":0,"timeOfTest":"2022-05-19T11:55:56"},{"id":4,"name":"Alisa","status":1,"timeOfTest":"2022-05-19T22:00:56"},{"id":5,"name":"Lily","status":1,"timeOfTest":"2022-05-19T16:11:56"},{"id":1,"name":"Tom","status":2,"timeOfTest":"2022-05-19T15:34:56"},{"id":2,"name":"Sherry","status":1,"timeOfTest":"2022-05-19T12:34:56"}
]