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

来源:互联网 发布:淘宝网搜索炉具大全 编辑:程序博客网 时间:2024/06/11 07:58
  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. }
0 0
原创粉丝点击