一个小小的排序类


import java.math.BigDecimal;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import org.apache.commons.beanutils.PropertyUtils;
/**
 * 排序类 目前只支持当前页面排序
 * 使用说明:SortUtil su  = SortUtil.newInstance();
 * su.setParam("你想排序的字段") 
 * su.toSort()方法 见方法说明
 * @author litao
 */
@SuppressWarnings("unchecked")
public class SortUtil implements Comparator <Object>{
	private static String t; 
	private static SortUtil su = null; 
	
	public SortUtil(){} 
	/**
	 * 要排序的字段名必需的
	 */
	public void setParam(String param) { 
		t=param; 
	} 
	public synchronized static SortUtil newInstance(){ 
		if(su==null){
			su = new SortUtil(); 
		}
		return su; 
	}
	public int compare(Object o1, Object o2) { 
		String value1 = String.valueOf(getFieldValue(o1,t)); 
		String value2 = String.valueOf(getFieldValue(o2,t));
		try { 
			BigDecimal b1=BigDecimal.valueOf(Double.valueOf(value1));
			BigDecimal b2=BigDecimal.valueOf(Double.valueOf(value2));
			return b1.subtract(b2).intValue(); 
		} catch (Exception e) { 
			return value1.compareTo(value2); 
		} 
	} 
	
	/**
	 * 升序(从小到大)
	 * @param list
	 * @return
	 */
	private List upSort(List list){ 
		Collections.sort(list, SortUtil.newInstance()); 
		return list; 
	}
	/**
	 * 降序(升序之后反转)
	 * @param list
	 * @return
	 */
	private List downSort(List list){ 
		this.upSort(list); 
		Collections.reverse(list); 
		return list; 
	} 
	/**
	 * 通过属性名获得对象的值
	 * @param entity
	 * @param propertyName
	 * @return
	 */
	private Object getFieldValue(Object entity , String propertyName ){ 
		Object obj=null;
			try {
				obj=PropertyUtils.getProperty(entity,propertyName);
			} catch (Exception e) {
				e.printStackTrace();
			}		
		return obj;
	}
	/**
	 * @param list
	 * @param orderByType 降序还是升序
	 * @return
	 */
	public List toSort(List list,String orderByType){
		if("true".equals(orderByType)){
			return upSort(list);
		}else{
			return downSort(list);
		}
	}
}

你可能感兴趣的:(java,apache)