工作中由于有时候项目中特殊业务需求,需要使用到内存分页,本人根据java.util.Arrays、java.util.Collections工具类结合泛型标记写了一个简单的内存分页工具类,支持数组和List,传入全量数据和页码直接返回对应页码的数据,返回数据类型根据传入原数据类型自动转换,可自己进行封装进行上下翻页,加入缓存等操作:
public class RAMPageUtil {
/**
* 根据传入的数组和页码返回分页后的数组
* @param original 全量数据的数组
* @param pageNum 页码
* @param <T>
* @return 返回分页后的对应页码页面的数据
*/
public static <T> T[] page(T[] original, int pageNum) {
return page(original,pageNum,Constants.PAGE_SIZE);
}
/**
* 根据传入的数组和页码返回分页后的数组
* @param original 全量数据的数组
* @param pageNum 页码
* @param <T>
* @return 返回分页后的对应页码页面的数据
*/
public static <T> T[] page(T[] original, String pageNum) {
if(StringUtil.isEmpty(pageNum) && !Pattern.compile("\\d+").matcher(pageNum).matches()) pageNum = "1";
return page(original,Integer.parseInt(pageNum));
}
/**
* 根据传入的数组和页码返回分页后的数组
* @param original 全量数据的数组
* @param pageNum 页码
* @param pageSize 每页数据条数
* @param <T>
* @return 返回分页后的对应页码页面的数据
*/
public static <T> T[] page(T[] original, int pageNum, int pageSize) {
if(null==original || original.length == 0) return (T[]) Array.newInstance(original.getClass().getComponentType(), 0);
if (pageNum <= 0) pageNum = 1;
int from = (pageNum - 1) * pageSize;
int to = pageNum * pageSize;
if(to > original.length) to = original.length;
if(from>=original.length || to <= from) return (T[]) Array.newInstance(original.getClass().getComponentType(), 0);
return Arrays.copyOfRange(original, from, to);
}
/**
* 根据传入的List和页码返回分页后的List
* @param original 全量的List数据
* @param pageNum 页码
* @param <T>
* @return 返回分页后的对应页码页面的List
*/
public static <T> List<T> page(List<T> original,int pageNum){
return page(original, pageNum, Constants.PAGE_SIZE);
}
/**
* 根据传入的数组和页码返回分页后的数组
* @param original 全量数据的数组
* @param pageNum 页码
* @param <T>
* @return 返回分页后的对应页码页面的数据
*/
public static <T> List<T> page(List<T> original, String pageNum) {
if(StringUtil.isEmpty(pageNum) && !Pattern.compile("\\d+").matcher(pageNum).matches()) pageNum = "1";
return page(original,Integer.parseInt(pageNum));
}
/**
* 根据传入的List和页码返回分页后的List
* @param original 全量的List数据
* @param pageNum 页码
* @param pageSize 每页数据条数
* @param <T>
* @return 返回分页后的对应页码页面的List
*/
public static <T> List<T> page(List<T> original,int pageNum,int pageSize){
List list = new ArrayList<T>();
Collections.addAll(list,page(original.toArray(),pageNum,pageSize));
return list;
}
}