java記憶體分頁工具類
阿新 • • 發佈:2019-01-05
工作中由於有時候專案中特殊業務需求,需要使用到記憶體分頁,本人根據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; } }