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

一、如何使用Collections工具类进行排序

使用Collections工具类进行排序主要有两种方式:

1.对象实现Comparable接口,重写compareTo方法 /** * @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; } } /** * @author Hanstrovsky */ public class Test01 { public static void main(String[] args) { List<Student> 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接口。

/** * @author Hanstrovsky */ public class Test02 { public static void main(String[] args) { List<Student> stuList = new ArrayList<>(); stuList.add(new Student("abc", 19)); stuList.add(new Student("cab", 18)); Collections.sort(stuList, new Comparator<Student>() { @Override public int compare(Student o1, Student o2) { return o1.age - o2.age; } }); System.out.println(stuList); } } 二、依据多个字段排序

当需求要求先按第一个字段排序,如果第一个字段相同,则按第二个字段排序,如果第二个相同,则按第三个字段... 可以定义多个Comparator,并依次使用。

/** * @author Hanstrovsky */ @Data @AllArgsConstructor public class Student { // 编号 private String id; // 身高 private int height; // 体重 private int weight; } /** * @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<Student> students = new ArrayList<>(); students.add(s1); students.add(s2); students.add(s3); System.out.println("原始排序:" + students); //按照身高升序排序 Comparator<Student> byHeight = Comparator.comparing(Student::getHeight); //按照体重升序排序 Comparator<Student> 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); } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zydpdd.html