1. 程式人生 > >java記憶體分頁工具類

java記憶體分頁工具類

工作中由於有時候專案中特殊業務需求,需要使用到記憶體分頁,本人根據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;
    }
}