Java代码 BeanComparator实现ArrayList中的元素按多个属性复合排序_BeanComparator  

  1. import java.util.Collections;       

  2. import java.util.Comparator;       

  3. import java.util.ArrayList;       

  4. import org.apache.commons.beanutils.BeanComparator;       

  5. import org.apache.commons.collections.ComparatorUtils;       

  6. import org.apache.commons.collections.comparators.ComparableComparator;       

  7. import org.apache.commons.collections.comparators.ComparatorChain;       

  8.   

  9. public class CompareTipA  {       

  10.     private int  id;       

  11.     private String  name;       

  12.     private String age;       

  13.   

  14.     @SuppressWarnings("unchecked")   

  15.     public static void main(String []args) {       

  16.   

  17.         //在列表中加入若干CompareTipA对象   

  18.         ArrayList<Object> list = new ArrayList<Object>();       

  19.         list.add(new CompareTipA(1,"3","五"));       

  20.         list.add(new CompareTipA(1,"1","六"));       

  21.         list.add(new CompareTipA(1,"5","二"));       

  22.         list.add(new CompareTipA(1,"4","四"));       

  23.         list.add(new CompareTipA(4,"2","一"));       

  24.   

  25.         //创建一个排序规则   

  26.         Comparator mycmp = ComparableComparator.getInstance();       

  27.         mycmp = ComparatorUtils.nullLowComparator(mycmp);  //允许null          

  28.         mycmp = ComparatorUtils.reversedComparator(mycmp); //逆序          

  29.   

  30.         //声明要排序的对象的属性,并指明所使用的排序规则,如果不指明,则用默认排序   

  31.         ArrayList<Object> sortFields = new ArrayList<Object>();       

  32.         sortFields.add(new BeanComparator("id", mycmp)); //id逆序  (主)       

  33.         sortFields.add(new BeanComparator("name"));      //name正序 (副)    

  34.   

  35.         //创建一个排序链   

  36.         ComparatorChain multiSort = new ComparatorChain(sortFields);    

  37.   

  38.         //开始真正的排序,按照先主,后副的规则   

  39.         Collections.sort(list,multiSort);       

  40.   

  41.         for (int i =0;i<list.size();i++) {       

  42.             System.out.println(list.get(i));    //输出       

  43.         }       

  44.         /**  

  45.          * 输出结果如下:  

  46.          * [id=4,name=2,age=一]  

  47.          * [id=1,name=1,age=六]  

  48.          * [id=1,name=3,age=五]  

  49.          * [id=1,name=4,age=四]  

  50.          * [id=1,name=5,age=二]  

  51.          */  

  52.     }       

  53.   

  54.     public CompareTipA(int id, String name,String age) {       

  55.         this.id = id;       

  56.         this.name = name;       

  57.         this.age = age;       

  58.     }       

  59.   

  60.     public int getId() {       

  61.         return this.id;       

  62.     }       

  63.   

  64.     public void setId(int id) {       

  65.         this.id = id;       

  66.     }       

  67.   

  68.     public String getName() {       

  69.         return this.name;       

  70.     }       

  71.   

  72.     public void setName(String name) {       

  73.         this.name = name;       

  74.     }       

  75.   

  76. //    public int compareTo(Object o) {       

  77. //        return this.comparator.compare(this, o);       

  78. //    }       

  79.   

  80.     public String toString() {       

  81.         return "[id=" + this.id + ",name=" + this.name +",age=" + this.age +"]";       

  82.     }       

  83.   

  84.     public String getAge() {       

  85.         return age;       

  86.     }       

  87.   

  88.     public void setAge(String age) {       

  89.         this.age = age;       

  90.     }       

  91. }  

  92. 太强大了,我非常喜欢