集合排序

集合排序(BigDecimal、根据对象某个属性排序)
 
 
      /**
      * 按照属性property给list排序
      * 支持的属性类型:Short Integer Long Float Double BigDecimal Date
      *  @param  <E>
      *  @param  list
      *  @param  property
      *  @param  clazz
      *  @param  ascOrDesc  (true 是 asc, false 是 desc)
      */
      public  static <E>  void  sortList(List<E> list,  final  String property,  final  boolean  ascOrDesc) {
           
             if  (list ==  null  || list.isEmpty()) {
                return ;
           }
           
           Collections. sort(list,  new  Comparator<E>() {
 
                  @Override
                  public  int  compare(E o1, E o2) {
                       try  {
                           Field field1 = o1.getClass().getField(property);
                           Field field2 = o2.getClass().getField(property);
                             try  {
                                Class<?> clazz =  field1.get(o1).getClass();
                                  if  (clazz == Short.  class  || clazz == Integer. class  || clazz == Long. class
                                           || clazz == Float. class  || clazz == Double. class ) {
                                       if  (ascOrDesc) {       //asc
                                             return  field1.getInt(o1) - field2.getInt(o2);
                                     }  else  {               //desc
                                             return  field2.getInt(o2) - field1.getInt(o1);               
                                     }    
                                }
                                  if  (clazz == BigDecimal.  class ) {
                                     BigDecimal b1 = (BigDecimal)field1.get(o1);
                                     BigDecimal b2 = (BigDecimal)field2.get(o2);
                                       if  (ascOrDesc) {       //asc
                                             return  b1.compareTo(b2);
                                     }  else  {               //desc
                                             return  b2.compareTo(b1);               
                                     }    
                                }
                                  if  (clazz == Date.  class ) {
                                     Date b1 = (Date)field1.get(o1);
                                     Date b2 = (Date)field2.get(o2);
                                       if  (ascOrDesc) {       //asc
                                             return  b1.compareTo(b2);
                                     }  else  {               //desc
                                             return  b2.compareTo(b1);               
                                     }    
                                }
                           }  catch  (IllegalArgumentException e) {
                                e.printStackTrace();
                           }  catch  (IllegalAccessException e) {
                                e.printStackTrace();
                           }
                     }  catch  (SecurityException e) {
                           e.printStackTrace();
                     }  catch  (NoSuchFieldException e) {
                           e.printStackTrace();
                     }
                     
                       return  0;
                }
                
           });
     }
     
      /**
      * 按照属性property给array排序
      * 支持的属性类型:Short Integer Long Float Double BigDecimal Date
      *  @param  <E>
      *  @param  e
      *  @param  property
      *  @param  ascOrDesc (true 是 asc, false 是 desc)
      */
      public  static <E>  void  sortArray(E[] e,  final  String property,  final  boolean  ascOrDesc) {
           
             if  (e ==  null  || e.  length  == 0) {
                return ;
           }
           
           Arrays. sort(e,  new  Comparator<E>() {
 
                  @Override
                  public  int  compare(E o1, E o2) {
                       try  {
                           Field field1 = o1.getClass().getField(property);
                           Field field2 = o2.getClass().getField(property);
                             try  {
                                Class<?> clazz =  field1.get(o1).getClass();
                                  if  (clazz == Short.  class  || clazz == Integer. class  || clazz == Long. class
                                           || clazz == Float. class  || clazz == Double. class ) {
                                       if  (ascOrDesc) {       //asc
                                             return  field1.getInt(o1) - field2.getInt(o2);
                                     }  else  {               //desc
                                             return  field2.getInt(o2) - field1.getInt(o1);               
                                     }    
                                }
                                  if  (clazz == BigDecimal.  class ) {
                                     BigDecimal b1 = (BigDecimal)field1.get(o1);
                                     BigDecimal b2 = (BigDecimal)field2.get(o2);
                                       if  (ascOrDesc) {       //asc
                                             return  b1.compareTo(b2);
                                     }  else  {               //desc
                                             return  b2.compareTo(b1);               
                                     }    
                                }
                                  if  (clazz == Date.  class ) {
                                     Date b1 = (Date)field1.get(o1);
                                     Date b2 = (Date)field2.get(o2);
                                       if  (ascOrDesc) {       //asc
                                             return  b1.compareTo(b2);
                                     }  else  {               //desc
                                             return  b2.compareTo(b1);               
                                     }    
                                }
                           }  catch  (IllegalArgumentException e) {
                                e.printStackTrace();
                           }  catch  (IllegalAccessException e) {
                                e.printStackTrace();
                           }
                     }  catch  (SecurityException e) {
                           e.printStackTrace();
                     }  catch  (NoSuchFieldException e) {
                           e.printStackTrace();
                     }
                     
                       return  0;
                }
                
           });
     }
     
      /**
      * 直接用Collections.sort(list  <BigDecimal> );即可,如果是BigDecimal数组则需要像下面这样重写
      *  @param  bds
      *  @param  ascOrDesc
      */
      public  static  void  sortBigDecimalArray(BigDecimal[] bds,  final  boolean  ascOrDesc) {
           
             if  (bds ==  null  || bds.  length  == 0) {
                return ;
           }
           
           Arrays. sort(bds,  new  Comparator<BigDecimal>() {
 
                  @Override
                  public  int  compare(BigDecimal o1, BigDecimal o2) {
                       if  (ascOrDesc) {       //asc
                             return  o1.compareTo(o2);
                     }  else  {               //desc
                             return  o2.compareTo(o1);                        
                     }
                }
           });
           
     }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值