在Java中使用Collections.sort 依据多个字段排序

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

在Java中使用Collections.sort 依据多个字段排序

Hanstrovsky   2020-03-18 我要评论
## 一、如何使用Collections工具类进行排序 使用Collections工具类进行排序主要有两种方式: ### 1.对象实现Comparable接口,重写compareTo方法 ```java /** * @author Hanstrovsky */ @Data @AllArgsConstructor public class Student implements Comparable { String name; int age; @Override public int compareTo(Object o) { Student stu = (Student) o; //this-参数:升序;参数-this:降序 return this.age - stu.age; } } ``` ```java /** * @author Hanstrovsky */ public class Test01 { public static void main(String[] args) { List stuList = new ArrayList<>(); stuList.add(new Student("abc", 17)); stuList.add(new Student("cab", 18)); Collections.sort(stuList); System.out.println(stuList); } } ``` ### 2.传入一个比较器对象Comparator。 还是用上面的student,不去实现Comparable接口。 ```java /** * @author Hanstrovsky */ public class Test02 { public static void main(String[] args) { List stuList = new ArrayList<>(); stuList.add(new Student("abc", 19)); stuList.add(new Student("cab", 18)); Collections.sort(stuList, new Comparator() { @Override public int compare(Student o1, Student o2) { return o1.age - o2.age; } }); System.out.println(stuList); } } ``` ## 二、依据多个字段排序 当需求要求先按第一个字段排序,如果第一个字段相同,则按第二个字段排序,如果第二个相同,则按第三个字段... 可以定义多个Comparator,并依次使用。 ```java /** * @author Hanstrovsky */ @Data @AllArgsConstructor public class Student { // 编号 private String id; // 身高 private int height; // 体重 private int weight; } ``` ```java /** * @author Hanstrovsky */ public class Test03 { public static void main(String[] args) { Student s1 = new Student("1", 180, 80); Student s2 = new Student("2", 175, 80); Student s3 = new Student("3", 175, 90); List students = new ArrayList<>(); students.add(s1); students.add(s2); students.add(s3); System.out.println("原始排序:" + students); //按照身高升序排序 Comparator byHeight = Comparator.comparing(Student::getHeight); //按照体重升序排序 Comparator byWeight = Comparator.comparing(Student::getWeight); //将list先按照"身高"升序再按照"体重"升序排列 students.sort(byHeight.thenComparing(byWeight)); //将list先按照"身高"升序再按照"体重"升序排列 System.out.println("优先身高:" + students); //将list先按照"体重"升序再按照"身高"升序排列 students.sort(byWeight.thenComparing(byHeight)); //将list先按照"身高"升序再按照"体重"升序排列 System.out.println("优先体重:" + students); } } ```

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们