Java藉助反射實現自定義對象List的排序

衆所周知,java裏List集合類提供了sort()的方法,方便懶人對list對象進行排序,可是,其要直接使用sort方法,前提是集合中存放的是可直接排序的基本類型,如List<int>, List<double>等,若是咱們定義了一個自定義類型 Class User,並建立一個自定義類型的集合如List<User>,那麼無參的sort()方法就不可用了,由於不知道如何排序了。這時就須要Comparator。 java

Comparator接口裏的compare(T o1, T o2)方法中能夠定義這兩個對象怎樣比較,怎樣決定誰排在誰前面。由於項目須要寫了個List工具類,能夠經過指定的屬性名,對List<T>類型的對象進行排序,具體代碼以下: ide

import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

import com.ucs.dto.user.UrUser;

public class ListUtils {
	/**
	 * 根據對象屬性名,對對象List進行排序
	 * @description 
	 * @author 
	 * @time 2016-3-23 
	 * @param t 對象List
	 * @param fieldName 要排序的屬性名
	 */
	public static <T> void sortList(List<T> t,final String fieldName) {
		 Collections.sort(t,new Comparator<T>(){  
				@Override
				public int compare(T o1, T o2) {
					String temp1 = getProperty(o1, fieldName).toString();
					String temp2 = getProperty(o2, fieldName).toString();
					return temp1.compareTo(temp2) ;
				}  
	        });  
	}
	/**
	 * 經過屬性名獲取屬性值
	 * @description 
	 * @author 
	 * @time 2016-3-23 
	 * @param bean 實體類
	 * @param fieldName 要獲取的屬性名
	 * @return
	 */
	public static Object getProperty(Object bean, String fieldName) {  
	    Field[] fields = bean.getClass().getDeclaredFields();  
	    Object obj = null;  
	    for (int i = 0; i < fields.length; i++) {  
	        Field field = fields[i];  
	        if (fieldName.equals(field.getName())) {
	        	Field.setAccessible(fields, true);     
	            try {  
	                obj = field.get(bean);  
	            } catch (IllegalArgumentException e) {  
	               e.printStackTrace();
	            } catch (IllegalAccessException e) {  
	                e.printStackTrace();
	            }  
	        }  
	    }  
	    return obj;   
	}  
	
	public static void main(String[] args) {
		UrUser u1 = new UrUser();
		u1.setLoginfailnum(1);
		UrUser u2 = new UrUser();
		u2.setLoginfailnum(2);
		UrUser u4 = new UrUser();
		u4.setLoginfailnum(7);
		UrUser u5 = new UrUser();
		u5.setLoginfailnum(3);
		UrUser u6 = new UrUser();
		u6.setLoginfailnum(0);
		UrUser u7 = new UrUser();
		u7.setLoginfailnum(8);
		List<UrUser> list = new ArrayList<UrUser>();
		list.add(u1);
		list.add(u2);
		list.add(u4);
		list.add(u5);
		list.add(u6);
		list.add(u7);
		sortList(list,"loginfailnum");
		for(UrUser u:list) {
			System.out.println(u.getLoginfailnum());
		}
		
	}

}
相關文章
相關標籤/搜索