如何对集合中对象的某个属性进行排序

假设一个List中,存放的是一个User对象,User对象中有一个age属性,根据age排序:
使用list中自带的sort方法,里面自己重写compare方法,或者直接使用lambda表达式,如下

public class Test {

    class User{
        private String name;
        private int age;

        public User(String name,int age){
            this.name =name;
            this.age = age;
        }

        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 static void main(String[] args) {
        // 创建四个实例
        User userA = new Test().new User("吴俊",30);
        User userB = new Test().new User("董浩",25);
        User userC = new Test().new User("黄健雄",27);
        User userD = new Test().new User("冯普超",30);
        List<User> userList=Lists.newArrayList(userA,userB,userC,userD);
        System.out.println("排序前:");
        for (User item: userList) {
            System.out.println("name:"+item.getName()+",age:"+item.getAge());
        }
        userList.sort(new Comparator<User>() {
            @Override
            public int compare(User o1, User o2) {
                if (o1.getAge()>o2.getAge()) return 1;
                return -1;
            }
        });
        System.out.println("重写compare排序后:");
        for (User item: userList) {
            System.out.println("name:"+item.getName()+",age:"+item.getAge());
        }

        List<User> userList2=Lists.newArrayList(userA,userB,userC,userD);
        System.out.println("排序前:");
        for (User item: userList2) {
            System.out.println("name:"+item.getName()+",age:"+item.getAge());
        }
        userList2.sort(Comparator.comparing(User::getAge));
        System.out.println("lambda表达式排序后:");
        for (User item: userList) {
            System.out.println("name:"+item.getName()+",age:"+item.getAge());
        }
    }
}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_37587333/article/details/93736595