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

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





  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. }  

 文章出自   http://dongwei.iteye.com/blog/230458

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值