Java-对象集合排序

方法

public class CollectionTest {

    private static List<Person> getList() {
        ArrayList<Person> list = new ArrayList<>();
        list.add(new Person("张三", 20));
        list.add(new Person("李四", 50));
        list.add(new Person("王五", 25));
        list.add(new Person("赵六", 4));
        list.add(new Person("marry", 35));
        list.add(new Person("jack", 35));
        list.add(new Person("ashe", 35));
        return list;
    }

    @Data
    static class Person {
        private String name;
        private Integer age;
        private Integer rank;
        private Student[] students;

        public Person(String name, Integer age) {
            this.name = name;
            this.age = age;
        }

        public Person(String name, Student[] students) {
            this.name = name;
            this.students = students;
        }

        @Override
        public String toString() {
            return "Person{" +
                    "name='" + this.name + '\'' +
                    ", age=" + this.age +
                    ", rank=" + this.rank +
                    ", students=" + Arrays.toString(this.students) +
                    '}';
        }
    }

    @Data
    static class Student {
        private String name;
        private Integer age;

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

        @Override
        public String toString() {
            return "Student{" +
                    "name='" + this.name + '\'' +
                    ", age=" + this.age +
                    '}';
        }
    }

    @Test
    public void test() {
        List<Person> listFirst = new LinkedList<>(getList());
        List<Person> listSecond = new LinkedList<>(getList());
        System.out.println("------初始------");
        listFirst.forEach(System.out::println);

        //方式一 stream
        List<Person> listFirstSort = listFirst.stream().sorted(Comparator.comparing(Person::getAge).reversed()).collect(Collectors.toList());
        listFirstSort.forEach(System.out::println);
        System.out.println("------stream 排序------");
//        方式二
        listSecond.sort(Comparator.comparing(Person::getAge));
        listSecond.forEach(System.out::println);

        System.out.println("------sort 排序------");
    }
}

原理

都是在JDK1.8 以后出现的特性

方法1:

集合转换为数据流,运用比较器(函数式接口)对实体类中的字段排序

方法2:

直接对集合运用比较器(函数式接口)对实体类中的字段排序。

注意:方式二:变量会引用结果 而 方式一 需要一个新的变量引用

posted @ 2021-12-22 14:13  MyOracleA  阅读(366)  评论(0)    收藏  举报