通用排序工具类 博客分类: Java 通用排序降序排序对list排序
程序员文章站
2024-02-24 08:13:22
...
1,实际应用:
List<OrderInfoBean> orderInfoBeans = commitOrderDto.getValue(); SortList<OrderInfoBean> sortList = new SortList<OrderInfoBean>(); sortList.Sort(orderInfoBeans, "getCreateTime", "desc");
2,工具类sortList源码
package com.gov.util; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.Collections; import java.util.Comparator; import java.util.List; /*** * 用户排序 * @author huangwei * 2015年7月1日 * @param <E> */ public class SortList<E> { 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; } }); } }
另外一种排序方式
实例:
List<CommonDictionary>list= DictionaryParam.getList("ptype"); Collections.sort(list,new SystemHWUtil. ListComparator(true,"value")); model.addAttribute("commonDictionaries", list);
说明:list的类型是ArrayList;
按照list中的元素(CommonDictionary对象)的成员变量value进行排序
SystemHWUtil. ListComparator的源代码:
public static class ListComparator implements Comparator{ /*** * 是否转化为Int之后再比较 */ private boolean isConvertInteger; /*** * 对哪个列进行排序 */ private String comparedProperty; public ListComparator(boolean isConvertInteger,String comparedProperty) { super(); this.isConvertInteger = isConvertInteger; this.comparedProperty=comparedProperty; } public int compare(Object o1, Object o2) { if(null!=o1&&null!=o2) { try { Object obj1=ReflectHWUtils.getObjectValue(o1, comparedProperty); Object obj2=ReflectHWUtils.getObjectValue(o2, comparedProperty); if(isConvertInteger){ int num1; int num2; if(obj1 instanceof Integer){ num1=(Integer)obj1; num2=(Integer)obj2; }else{ num1=Integer.parseInt(obj1.toString()); num2=Integer.parseInt(obj2.toString()); } if(num1>num2){ return 1; }else if(num1<num2){ return -1; }else{ return 0; } }else{ return obj1.toString().compareTo(obj2.toString()); } } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } return 0/*等于*/; } }
附录:
public static class ArrayListComparator implements Comparator{ /*** * 排序的依据 */ private String titles[]; /*** * 对哪个列进行排序 */ private String comparedProperty; public ArrayListComparator(String[] titles,String comparedProperty) { super(); this.titles = titles; this.comparedProperty=comparedProperty; } public int compare(Object o1, Object o2) { if(null!=o1&&null!=o2) { try { if(SystemHWUtil.indexOfArr(titles,(String)ReflectHWUtils.getObjectValue(o1, comparedProperty) ) > SystemHWUtil.indexOfArr(titles,(String)ReflectHWUtils.getObjectValue(o2, comparedProperty))){ return 1/*大于*/; }else { return -1/*小于*/; } } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchFieldException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } return 0/*等于*/; } }