根據實體類中的多個字段的值,對實體類進行排序

     如何根據實體類中的一個或者多個字段進行進行排序:

    //測試用實體類
   public  class test{
        private String name;
        private Integer orderOne;
        private Integer orderTwo;

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Integer getOrderOne() {
            return orderOne;
        }

        public void setOrderOne(Integer orderOne) {
            this.orderOne = orderOne;
        }

        public Integer getOrderTwo() {
            return orderTwo;
        }

        public void setOrderTwo(Integer orderTwo) {
            this.orderTwo = orderTwo;
        }

        public test(String name, Integer orderOne, Integer orderTwo) {
            this.name = name;
            this.orderOne = orderOne;
            this.orderTwo = orderTwo;
        }
    }
下面是乾貨:



//需要導入的包
import java.util.Collections;
import org.apache.commons.collections.ComparatorUtils;
import org.apache.commons.collections.comparators.ComparableComparator;
import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.comparators.ComparatorChain;


 @Test
    public  void  testOrderBeansList(){
        //測試用集合
        List<test> list = new ArrayList<test>();
        //添加十個測試數據
        for(int i = 0;i<10;i++){

            Random random=new Random();// 定義隨機類
            int num1=random.nextInt(10);// 返回[0,10)集合中的隨機整數,注意不包括10
            int num2=random.nextInt(10);// 返回[0,10)集合中的隨機整數,注意不包括10
            test t = new test("name"+num1,num1,num2);
            list.add(t);
        }

        try {
            //根據集合中的某個字段,對集合排序__特別適用於從mongoDB中從多層嵌套取出的數據,方便對其排序
            ComparatorChain chain = new ComparatorChain();
            chain.addComparator(new BeanComparator("orderOne"), false);//true,false降序升序
            chain.addComparator(new BeanComparator("orderTwo"), true);//true,false降序升序
            Collections.sort(list, chain);//List<T> 或者是其他的集合
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

結果如下:


以往感覺比較冗餘的寫法:
      
  /********************************以往使用的感覺比較冗餘的寫法****************************************/
        try {

            Comparator mycmp1 = ComparableComparator.getInstance ();

            mycmp1 = ComparatorUtils. reversedComparator(mycmp1); //倒序

            Comparator mycmp2 = ComparableComparator.getInstance ();

            mycmp2 = ComparatorUtils. nullHighComparator(mycmp2); //允許null,正序遞增排列

            // 聲明要排序的對象的屬性,並指明所使用的排序規則,如果不指明,則用默認排序
            ArrayList<Object> sortFields = new ArrayList<Object>();
            sortFields.add( new BeanComparator("orderOne" , mycmp1)); //主排序(第一排序)
            sortFields.add( new BeanComparator("orderTwo" , mycmp2)); //次排序(第二排序)

            // 創建一個排序鏈
            ComparatorChain multiSort = new ComparatorChain(sortFields);

            // 開始真正的排序,按照先主,後副的規則
            Collections.sort (list , multiSort);

        } catch (Exception e) {
            e.printStackTrace();
        }

        /********************************以往使用的感覺比較冗餘的寫法****************************************/

結果如下:



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章