commons-beanutils 類庫(kù)中有一個(gè) BeanComparator 類,可以用來給 JavaBean 排序。但是這個(gè)類一次只能對(duì)一個(gè)屬性排序。下面是一個(gè)利用 BeanComparator 實(shí)現(xiàn)對(duì) JavaBean 的多個(gè)屬性進(jìn)行排序的例子,非常簡(jiǎn)單:
importorg.apache.commons.beanutils.BeanComparator;
importjava.util.Collections;
importjava.util.Comparator;
importjava.util.List;
/**
*對(duì)List元素的多個(gè)屬性進(jìn)行排序的類
*/
@SuppressWarnings({"unchecked"})
publicclassListSorter{
/**
*List元素的多個(gè)屬性進(jìn)行排序。例如ListSorter.sort(list,"name","age"),則先按
*name屬性排序,name相同的元素按age屬性排序。
*
*@paramlist 包含要排序元素的List
*@paramproperties要排序的屬性。前面的值優(yōu)先級(jí)高。
*/
publicstaticvoidsort(Listlist,finalString...properties){
Collections.sort(list,newComparator(){
publicintcompare(Vo1,Vo2){
if(o1==null&&o2==null)return0;
if(o1==null)return-1;
if(o2==null)return1;
for(Stringproperty:properties){
Comparatorc=newBeanComparator(property);
intresult=c.compare(o1,o2);
if(result!=0){
returnresult;
}
}
return0;
}
});
}
}
importorg.apache.commons.beanutils.BeanComparator;
importjava.util.Collections;
importjava.util.Comparator;
importjava.util.List;
/**
*對(duì)List元素的多個(gè)屬性進(jìn)行排序的類
*/
@SuppressWarnings({"unchecked"})
publicclassListSorter{
/**
*List元素的多個(gè)屬性進(jìn)行排序。例如ListSorter.sort(list,"name","age"),則先按
*name屬性排序,name相同的元素按age屬性排序。
*
*@paramlist 包含要排序元素的List
*@paramproperties要排序的屬性。前面的值優(yōu)先級(jí)高。
*/
publicstatic
Collections.sort(list,newComparator
publicintcompare(Vo1,Vo2){
if(o1==null&&o2==null)return0;
if(o1==null)return-1;
if(o2==null)return1;
for(Stringproperty:properties){
Comparatorc=newBeanComparator(property);
intresult=c.compare(o1,o2);
if(result!=0){
returnresult;
}
}
return0;
}
});
}
}