Java使用lamda优雅实现List中的元素按某一个属性排序

2022-08-04 489点热度 0人点赞 0条评论

需求说明

例如一个ArrayList里面存有students,要按照student的某个属性(例如序号或者年龄)排序。

Student示例:

public class Student implements Serializable {
    private Integer no; // 学号
    private int age; // 年龄
    private String name; // 姓名

    public Student(Integer no, String name, int age) {
        this.no = no;
        this.name = name;
        this.age = age;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    public Integer getNo() {
        return no;
    }

    public void setNo(Integer no) {
        this.no = no;
    }
}

有如下ArrayList:

List<Student> students = new ArrayList<>();
students.add(new Student(1, "张三", 18));
students.add(new Student(2, "李四", 20));
students.add(new Student(3, "王五", 16));

实现排序

可以使用Collections.sort方法:

Collections.sort(students, new Comparator<Student>() {
    @Override
    public int compare(Student student1, Student student2) {
        return student1.getAge() - student2.getAge();
        // return student1.getNo().compareTo(student2.getNo()); // 如果按照学号排序,这样做
    }
});

// 使用lamda 这样做:
Collections.sort(students, Comparator.comparing(Student::getNo));

也可以直接使用students的sort方法或者stream方法

// 按照年龄排序
students.sort(Comparator.comparing(Student::getAge));
// 按照年龄的倒序排序:
students.sort((t1, t2) -> t2.getAge() - t1.getAge());

// 按照学号排序
students.sort(Comparator.comparing(Student::getNo));
// 按照学号倒序:
students.sort((t1, t2) -> t2.getNo().compareTo(t1.getNo()));

// 使用stream排序并打印
students.stream().sorted(Comparator.comparing(Student::getAge)).forEach(System.out::println);

 

 

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论