衆所周知,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()); } } }