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;
}
});
}
}
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;
}
});
}
}
相关文章推荐
- java使用Comparator根据list对象的属性进行排序
- 【原创】Java 对 List 内对象根据对象属性进行排序
- Java中对List中的存储对象根据属性进行排序的办法
- 如何根据对象的属性,对集合(list / set)中的对象进行排序
- java针对list中的对象的某一属性进行排序
- java list按照 对象 指定多个字段属性进行排序
- java list按照元素对象的指定多个字段属性进行排序
- java list按照元素对象的指定多个字段属性进行排序
- java根据List内对象的属性排序方法
- java list 根据对象的一个属性排序
- 根据List的对象的某个属性进行排序方法
- C#中对List<Object>泛型集合,根据对象的某一属性进行升序排序
- 花旗软件 电面问题(一) 根据对象的某一属性排序一组对象(JAVA实现)
- java list按照元素对象的指定多个字段属性进行排序
- Java 中List数据,自定义对象按指定的属性进行排序
- List集合根据存储对象的属性字段排序实现
- java list按照 对象 指定多个字段属性进行排序
- java list按照元素对象的指定多个字段属性进行排序
- List集合中删除属性(一个或者多个属性)相同的对象返回List且根据对象属性进行排序输出
- java list按照元素对象的指定多个字段属性进行排序