序言
提到分页,我想大部分开发者首先会想到数据库分页技术。是的,正常情况下分页排序我们都会交给数据库来做,毕竟这么做省时省力。凡是都有例外,当我们的业务逻辑或者查询数据无法通过一条sql完成时,这时我们就需要把所有的数据查询出来,在内存中进行排序分页。
应用场景
提到内存,我们就要知道如果数据量过大,本篇分享就不再适用。这里主要是针对成千上万条数据可以这么多,超出10万条以上,最好不要这么做,因为无论是执行效率还是内存CPU占用都是非常大的。
程序源码
因为工作上一个紧急需求,所以对于代码优化这块没有怎么用心去做。主要技术点就是反射技术。
ListSortUtils :排序工具类
/**
* List通用排序工具类
*
* @author bin.bi
*/
public class ListSortUtils {
/**
* 基础对象列表排序,如List<Integer>|List<String>
*/
public static <T> void sort(List<T> list, final String sort) {
if (StringUtils.isEmpty(sort)) {
return;
}
Collections.sort(list, new Comparator<T>() {
@Override
public int compare(T o1, T o2) {
int ret = 0;
if (o1 == null && o2 != null) {
ret = -1;
} else if (o1 != null && o2 == null) {
ret = 1;
} else if (o1 == null && o2 == null) {
return 0;
}
if (o1 instanceof BigDecimal) {
ret = ((BigDecimal) o1).compareTo((BigDecimal) o2);
} else if (o1 instanceof String) {
ret = (o1.toString()).compareTo(o2.toString());
} else if (o1 instanceof Date) {
ret = ((Date) o1).compareTo((Date) o2);
} else {
ret = (o1.toString()).compareTo(o2.toString());
}
return SortEnum.ASC.getSort().equals(sort) ? ret : -ret;
}
});
}
/**
* 自定义对