list排序

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

猜你喜欢

转载自blog.csdn.net/zengguanlin/article/details/80064754
今日推荐