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;
                }
            }
        });
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章