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