zoukankan      html  css  js  c++  java
  • 排序List集合

    这两天写代码过程中遇到一个需求,需要按照某个字段排序List集合,自己实现了一半,发现网上有个更好的版本,就采用了这个,记录下来。

    使用这个工具类要注意一个就是 如果你按照age 字段排序,那么age字段值不能为空,如果值为空会报异常,那么解决这个办法就是将空值的赋值。

     1 import java.lang.reflect.Method;  
     2  
     3 import java.util.Collections;  
     4 import java.util.Comparator;  
     5 import java.util.List;  
     6   
     7 /**
     8  * 
     9  * @ClassName:  ListSortUtil   
    10  * @Description:TODO(list集合排序 按照字段 升序或降序)   
    11  * @author: yh
    12  * @date:   2017年2月9日 下午4:05:36  
    13  * 注意:要排序的字段值不能为空  
    14  * @param <T>
    15  */
    16 public class ListSortUtil<T> {  
    17     /** 
    18      * @param targetList 目标排序List 
    19      * @param sortField 排序字段(实体类属性名) 
    20      * @param sortMode 排序方式(asc or  desc) 
    21      */  
    22     @SuppressWarnings({ "unchecked", "rawtypes" })  
    23     public void sort(List<T> targetList, final String sortField, final String sortMode) {  
    24       
    25         Collections.sort(targetList, new Comparator() {  
    26             public int compare(Object obj1, Object obj2) {   
    27                 int retVal = 0;  
    28                 try {  
    29                       
    30                     String newStr=sortField.substring(0, 1).toUpperCase()+sortField.replaceFirst("\w","");   
    31                     String methodStr="get"+newStr;  
    32                       
    33                     Method method1 = ((T)obj1).getClass().getMethod(methodStr, null);  
    34                     Method method2 = ((T)obj2).getClass().getMethod(methodStr, null);  
    35                     if (sortMode != null && "desc".equals(sortMode)) {  
    36                         retVal = method2.invoke(((T) obj2), null).toString().compareTo(method1.invoke(((T) obj1), null).toString());  // 倒序   
    37                     } else {  
    38                         retVal = method1.invoke(((T) obj1), null).toString().compareTo(method2.invoke(((T) obj2), null).toString());  // 正序  
    39                     }  
    40                 } catch (Exception e) {  
    41                     throw new RuntimeException();  
    42                 }  
    43                 return retVal;  
    44             }  
    45         });  
    46     }  
    47       
    48 } 
  • 相关阅读:
    煲鸡汤流程
    面向对象
    程序员英语学习思维导图
    百度通配符学习
    面向对象
    IO学习
    理解java的三大特性之继承
    重载(overload)、覆盖(override)、隐藏(hide)的区别
    2018年值得关注的10大JavaScript动画库
    小知识点总结
  • 原文地址:https://www.cnblogs.com/yangh965/p/6387177.html
Copyright © 2011-2022 走看看