/**
* 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降序排序