Displaytag分页和排序(2)

1.先叙述下比较器,比较一个集合和数据的数据我们可以通过Collecton.sort
或者Array.sort传递集合或者比较器,如果集合元素实现了Comparable接口,可以不用比较器,但是如果没有就需要比较器了,否则Exception occurs了,实现的比较器,只要特殊处理了Number数类型的比较,按照其值比较,而不是Ascii码:
具体代码如下:
package com.***.base.util;
import java.io.Serializable;import java.util.Comparator;import java.util.List;import java.lang.reflect.Field;import org.apache.commons.logging.Log;import org.apache.commons.logging.LogFactory;import org.apache.commons.lang.ClassUtils;
/** * @author Leiqiang 2008.12.08 * *
/public class BaseComparator implements Comparator, Serializable {
/** * */
private static final long serialVersionUID = -919057368228216736L;
private final static Log log = LogFactory.getLog(BaseComparator.class);
private boolean ascending;
private String property;
public BaseComparator() { }
public BaseComparator(boolean ascending,String property)
{
this.ascending = ascending;
this.property = property;
}
public String getProperty()
{ return property; }

public void setProperty(String property)
{ this.property = property; }
public boolean isAscending()
{ return ascending; }
public void setAscending(boolean ascending)
{ this.ascending = ascending; }

public int compare(Object object1, Object object2)
{ log.info("Sort"+object1.toString()+" "+object2);
int returnValue=0;
if (object1 == null && object2 != null)
{ returnValue = -1; }
else if (object1 != null && object2 == null)
{ returnValue = 1; }
else if (object1 == null && object2 == null)
{
returnValue = 0; }
else if(object1.getClass()==object2.getClass())
{
try
{
Class objectClass = object1.getClass();
Field field = objectClass.getDeclaredField(this.property);
if(!field.isAccessible())
field.setAccessible(true);
Class fieldClass = field.getType();
log.info("----Filed class" + fieldClass);
List classList= ClassUtils.getAllSuperclasses(fieldClass);
Class number = Number.class;
//对于Number类型的,按值排序,不按ASCII码排序 雷强 if( classList.contains(number))
{
Number object1Value =(Number)(field.get(object1) ); Number object2Value= (Number)(field.get(object2)); returnValue=(object1Value.doubleValue()>object2Value.doubleValue())?1:-1;
if(object1Value.doubleValue()==object2Value.doubleValue()) returnValue=0;
log.info("进入---"+returnValue); }
else
{
String object1Value = field.get(object1).toString(); String object2Value= field.get(object2).toString(); returnValue=object1Value.compareTo(object2Value); }
} catch(Exception e)
{ e.printStackTrace();
returnValue = 0; } }
int ascendingInt = this.ascending ? 1 : -1; return ascendingInt * returnValue; }
}

你可能感兴趣的:(apache)