您的位置:首页 > 编程语言 > Java开发

Java实现根据List中对象的相应属性进行排序

2011-07-22 14:44 1081 查看
 最近项目中遇到一个排序的问题,需要传入一个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; 
            } 
         }); 
    } 
 
 
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息