/** * List排序 * @param list * @param orderBy 排序字段 * @param isAsc 是否升序 * @return */ public static <T> List<T> sort(List<T> list,String orderBy,boolean isAsc) { if (list==null||list.size()<2) { return list; } Collections.sort(list,new MyComparator<>(orderBy, isAsc)); return list; } static class MyComparator<T> implements Comparator<T>{ private String orderBy; private boolean isAsc; public MyComparator(String orderBy,boolean isAsc) { this.orderBy=orderBy; this.isAsc=isAsc; } @Override public int compare(T o1, T o2) { String val1=null; String val2=null; try { val1=BeanUtils.getProperty(o1, orderBy); val2=BeanUtils.getProperty(o2, orderBy); } catch (Exception e) {e.printStackTrace();} if (StringUtil.isNull(val1)&&StringUtil.isNull(val2)) { return 0; } if (StringUtil.isNull(val1)) { return isAsc?-1:1; } if (StringUtil.isNull(val2)) { return isAsc?1:-1; } boolean isNum=val1.matches("^(-?\\d+)(\\.\\d+)?$");//防止负数,否则按字符串即可 boolean isUsDate=val1.contains(" CST ")&&val1.contains(":");//防止美时间类型,其他时间格式按照字符串即可 if (isNum) { return isAsc?DoubleUtil.parseDouble(val1).compareTo(DoubleUtil.parseDouble(val2)):DoubleUtil.parseDouble(val2).compareTo(DoubleUtil.parseDouble(val1)); }else if (isUsDate) { return isAsc?DateUtil.formatCST(val1).compareTo(DateUtil.formatCST(val2)):DateUtil.formatCST(val2).compareTo(DateUtil.formatCST(val1)); }else { return isAsc?val1.compareTo(val2):val2.compareTo(val1); } } }
调用:
CollectionUtil.sort(list, "handleDate", false);//按handleDate降序排序