最近项目中遇到一个排序的问题,需要传入一个List,List中存入了相应的对象,要根据对象中的一些属性进行排序,从网上查询了不少资料后问题终于得到了解决。现将具体方法记录下来,万一以后用到就不用在去想办法啦。
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
/**
*
* @author 叶祥杰
* @E-mail monkey_ye@qq.com
* @创建时间 2011-7-20
* @param <E>
*/
public class SortList<E> {
/**
* 根据对象的相关属性对对象List进行排序
* @param list 需要排序的list
* @param method 排序的属性
* @param sort 排序的方式,desc/asc
* 例如:sortList.Sort(adt, "getVal", "desc");
*/
@SuppressWarnings({ "unchecked", "rawtypes" })
public void Sort(List<E> list, final String method, final String sort){
Collections.sort(list, new Comparator() {
public int compare(Object a, Object b) {
int ret = 0;
try{
Method m1 = ((E)a).getClass().getMethod(method, null);
Method m2 = ((E)b).getClass().getMethod(method, null);
if(sort != null && "desc".equals(sort))//倒序
ret = m2.invoke(((E)b), null).toString().compareTo(m1.invoke(((E)a), null).toString());
else//正序
ret = m1.invoke(((E)a), null).toString().compareTo(m2.invoke(((E)b), null).toString());
}catch(NoSuchMethodException ne){
System.out.println(ne);
}catch(IllegalAccessException ie){
System.out.println(ie);
}catch(InvocationTargetException it){
System.out.println(it);
}
return ret;
}
});
}
}