Java集合按照对象的某个属性进行比较排序

  • 需求:list里面的元素按照某一属性排序(以下demo都是升序)

  • 待排序list:

    List<User> ulist = new ArrayList<User>();
    ulist.add(new User("jiazhipeng",23));
    ulist.add(new User("ahui",24));
    ulist.add(new User("yinxiao",25));
  • 实现:

    • 方法一:

      • 描述:排序对象类实现comparable接口的compareTo方法,然后把对象放入list,然后调用Collections.sort(list);

      • egg:

        public class User implements Comparable<User> {
            private String name;
            private Integer age;
        
            /**
             * getters && setters
             */
        
            @Override
            public int compareTo(User o) {
                if(o != null){
                    if(this.getAge() > o.getAge()){
                       return 1;
                    }else if(this.getAge() == o.getAge()){
                       return 0;
                    }
               }
                return -1;
            }
        }
      • test:

        Collections.sort(ulist);
        for(User user : ulist){
            System.out.println("姓名:" + user.getName() + ";年龄:" + user.getAge());
        }
    • 方法二:

      • 描述:不对要排序对象类做任何改动,创建Comparator接口的实现类C,然后 把对象放入list,然后调用Collections.sort(list, C);

      • egg:

        vo类:

        public class User {
            private String name;
            private Integer age;
        
            /**
             * getters && setters
             */
        }

        比较器:

        
            public class ComparatorImpl implements Comparator<User>{
                @Override
                public int compare(User o1, User o2) { 
                    if(null != o1 && null != o2){
                        if(o1.getAge() > o2.getAge()){
                            return 1;
                        }else if(o1.getAge() == o2.getAge()){
                            return 0;
                        }
                    }
                    return -1;
                }
            }
      • test:

        Collections.sort(ulist, new ComparatorImpl());
        for(User user : ulist){
            System.out.println("姓名:" + user.getName() + ";年龄:" + user.getAge());
        }
      • 匿名类写法test:

        Collections.sort(ulist, new Comparator<User>() {
            @Override
            public int compare(User o1, User o2) {
                Integer age1 = o1.getAge();
                Integer age2 = o2.getAge();
                if (age1 > age2) {
                    return 1;
                } else if (age1 == age2) {
                    return 0;
                } else {
                    return -1;
                }
            }
        });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值