Young87

当前位置:首页 >个人收藏

java 两个字段排序_在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 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 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,并依次使用。

/**

* @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 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);

}

}

除特别声明,本站所有文章均为原创,如需转载请以超级链接形式注明出处:SmartCat's Blog

上一篇: java 两个字段排序_如何在Java中按两个字段排序?

下一篇: java 计算年龄_java实现简单年龄计算器

精华推荐