1. 程式人生 > >Java集合按照物件的某個屬性進行比較排序

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;
                }
            }
        });