排序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 } 

 

posted @ 2017-02-10 17:05  heyLuer  阅读(225)  评论(0编辑  收藏  举报