Java8-Stream流操作List排序(完整实例讲解)

废话少说,直接上代码。

一个学生类的实体类

ps:使用IDEA的同学,快捷键[Alt+Insert],可以一键生成对应的set/get/tostring/构造方法。
public class Student {
    private Long id;
    private String name;
    private int age;
    private Double height;

    public Student(Long id, String name, int age, Double height) {
        this.id = id;
        this.name = name;
        this.age = age;
        this.height = height;
    }

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public Double getHeight() {
        return height;
    }

    public void setHeight(Double height) {
        this.height = height;
    }

    @Override
    public String toString() {
        return "Student{" +
                "id=" + id +
                ", name=" + name +  +
                ", age=" + age +
                ", height=" + height +
                };
    }
}

然后我们测试下三种排序方式:

    按照id升序排列 按照id逆序排列 按照age排序,然后按照height排序
public class ListStreamSortTest {
    public static void main(String[] args) {
        // 一个集合中放入4个学生对象
        List<Student> list = new ArrayList<>();
        list.add(new Student(10002L, "ZhangSan", 19, 175.2));
        list.add(new Student(10003L, "LiSi", 18, 180.1));
        list.add(new Student(10004L, "Peter", 19, 170.8));
        list.add(new Student(10001L, "KangKang", 18, 167.4));
        // 打印默认顺序
        System.out.println("默认顺序:");
        list.stream().forEach(System.out::println);

        // 按照id排序
        System.out.println("id升序:");
        list.stream().sorted(Comparator.comparing(Student::getId))
                .forEach(System.out::println);

        // 按照id逆序排列
        System.out.println("id逆序:");
        list.stream().sorted(Comparator.comparing(Student::getId).reversed())
                .forEach(System.out::println);

        // 按照年龄排序,再按照升高排序
        System.out.println("age和height排序:");
        list.stream().sorted(Comparator.comparing(Student::getAge).thenComparing(Student::getHeight))
                .forEach(System.out::println);
    }
}

执行结果:

默认顺序:
Student{id=10002, name=ZhangSan, age=19, height=175.2}
Student{id=10003, name=LiSi, age=18, height=180.1}
Student{id=10004, name=Peter, age=19, height=170.8}
Student{id=10001, name=KangKang, age=18, height=167.4}
id升序:
Student{id=10001, name=KangKang, age=18, height=167.4}
Student{id=10002, name=ZhangSan, age=19, height=175.2}
Student{id=10003, name=LiSi, age=18, height=180.1}
Student{id=10004, name=Peter, age=19, height=170.8}
id逆序:
Student{id=10004, name=Peter, age=19, height=170.8}
Student{id=10003, name=LiSi, age=18, height=180.1}
Student{id=10002, name=ZhangSan, age=19, height=175.2}
Student{id=10001, name=KangKang, age=18, height=167.4}
age和height排序:
Student{id=10001, name=KangKang, age=18, height=167.4}
Student{id=10003, name=LiSi, age=18, height=180.1}
Student{id=10004, name=Peter, age=19, height=170.8}
Student{id=10002, name=ZhangSan, age=19, height=175.2}


沪漂程序员。 坚持写博客,如果觉得还可以的话,给个小星星哦,你的支持就是我创作的动力。

阅读更多我的相关内容

经验分享 程序员 微信小程序 职场和发展