使用说明
封装是apache 的 commons 组件中的排序类,使用时需要导入
这两个包。
源码
import org.apache.commons.beanutils.BeanComparator;
import org.apache.commons.collections.ComparatorUtils;
import org.apache.commons.collections.comparators.ComparableComparator;
import org.apache.commons.collections.comparators.ComparatorChain;
import java.util.*;
/**
*
*/
public class CollectionUtils
{
/**
* 正序
*/
public static final String SORT_ORDER_ASC = "asc";
/**
* 逆序
*/
public static final String SORT_ORDER_DESC = "desc";
/**
* 方法名称:sortTheList
* 内容摘要:根据指定的字段数组对List中的对象进行排序
* @param list
* @param sortFields
* @param sortOrder
*/
public static void sortTheList(List list, String[] sortFields, String sortOrder)
{
if(sortFields == null || sortFields.length <= 0)
{
return;
}
ArrayList sorts = new ArrayList();
Comparator c = ComparableComparator.getInstance();
c = ComparatorUtils.nullLowComparator(c); //允许null
if (StringUtil.isEqual(sortOrder, CollectionUtils.SORT_ORDER_DESC))
{
c = ComparatorUtils.reversedComparator(c); //逆序
}
String sortField = null ;
for(int i=0 ; i< sortFields.length ; i++)
{
sortField = sortFields[i];
if(StringUtil.isNotEmpty(sortField))
{
sorts.add(new BeanComparator(sortField,c));
}
}
ComparatorChain multiSort = new ComparatorChain(sorts);
Collections.sort(list, multiSort);
}
/**
* 方法名称:sortTheList
* 内容摘要:根据指定的字段对List中的对象进行排序
* @param list
* @param sortFiled
* @param sortOrder
*/
public static void sortTheList(List list, String sortFiled, String sortOrder)
{
if(StringUtil.isEmpty(sortFiled))
{
return;
}
String[] sortFields = new String[]{sortFiled};
sortTheList(list, sortFields, sortOrder);
}
public static void main(String[] args)
{
Set one = new HashSet();
Set two = new HashSet();
one.add(new Integer(1));
one.add(new Integer(1));
one.add(new Integer(2));
one.add(new Integer(3));
two.add(new Integer(4));
two.add(new Integer(3));
two.add(new Integer(5));
two.add(new Integer(6));
two.removeAll(one);
System.out.println(two);
}
}
使用范围
CollectionUtils 适用于数据库中排序性能开销很大,把数据排序放到代码的层面上来处理,性能会明显提升。