以list模拟数据源的分页
程序员文章站
2022-04-11 22:34:51
...
/** * 分页 * @param currentNo 当前页 * @param pageSize 每页数量 * @param resultList 数据源 * @return */ Page<Map<String, String>> page(int currentNo,int pageSize,List<Map<String, String>> resultList){ currentNo = (currentNo < 1) ? 1 : currentNo; //总页数 int maxPage = resultList.size() % pageSize != 0 ? (resultList.size() / pageSize) + 1 : (resultList.size() / pageSize); if(currentNo > maxPage){ currentNo = 1; } int fromIndex = pageSize * (currentNo - 1); int toIndex = fromIndex + pageSize; if(maxPage == currentNo){//最后一页 toIndex = resultList.size(); } List<Map<String, String>> subList = resultList.subList(fromIndex, toIndex); return new Page<Map<String, String>>(fromIndex, resultList.size(), pageSize, subList); }
Page类--------------------------------------------
package import java.io.Serializable; import java.util.Collections; import java.util.List; public class Page<T> implements Serializable { private static final long serialVersionUID = -8478562630743994981L; public static int DEFAULT_DISPLAY_PAGE_COUNT = 10; // 默认展示最多页数 private static int DEFAULT_PAGE_SIZE = 20; private int pageSize = DEFAULT_PAGE_SIZE; // 每页的记录数 private int start; // 当前页第一条数据在List中的位置,从0开始 private List<T> data = Collections.emptyList(); // 当前页中存放的记录 private int totalCount = 0; // 总记录数 private int pageCount = DEFAULT_DISPLAY_PAGE_COUNT;// 展示最多页数,默认值为DEFAULT_DISPLAY_PAGE_COUNT /** * 构造方法,只构造空页. */ public Page() { this(1, 0, DEFAULT_PAGE_SIZE, Collections.<T> emptyList()); } /** * 构造方法,只构造空页,pageSize不变 */ public Page(int pageSize) { this(1, 0, pageSize, Collections.<T> emptyList()); } /** * 默认构造方法. * @param start 本页数据在数据库中的起始位置 * @param totalSize 数据库中总记录条数 * @param pageSize 本页容量 * @param data 本页包含的数据 */ public Page(int start, int totalSize, int pageSize, List<T> data) { this.pageSize = pageSize; this.start = start; this.totalCount = totalSize; this.data = data; } /** 取总记录数 */ public int getTotalCount() { return this.totalCount; } /** 取总页数 */ public int getTotalPageCount() { if (totalCount % pageSize == 0) return totalCount / pageSize; else return totalCount / pageSize + 1; } /** 取每页数据容量 */ public int getPageSize() { return pageSize; } /** 取当前页中的记录 */ public List<T> getResult() { return data; } /** 取该页当前页码,页码从1开始 */ public int getCurrentPageNo() { return start / pageSize + 1; } public int getPageNo() { return getCurrentPageNo(); } /** 该页是否有下一页 */ public boolean isHasNextPage() { return this.getCurrentPageNo() < this.getTotalPageCount(); } /** 该页是否有上一页 */ public boolean isHasPreviousPage() { return this.getCurrentPageNo() > 1; } /** * 取下一页的页码 */ public int getNextPageNo() { if (isHasNextPage()) { return getCurrentPageNo() + 1; } return getCurrentPageNo(); } /** * 取上一页的页码 */ public int getPreviousPageNo() { if (isHasPreviousPage()) { return getCurrentPageNo() - 1; } return getCurrentPageNo(); } /** * 取首页的页码 */ public int getFirstPageNo() { return 1; } /** * 取尾页的页码 */ public int getLastPageNo() { return getTotalPageCount(); } /** * 取展示页码集 */ public int[] getDisplayNos() { // 仅1页 if (getTotalPageCount() == 1) { return null; } // 总页数不足展示页数 if (getTotalPageCount() <= pageCount) { int[] nos = new int[getTotalPageCount()]; for (int i = 0; i < nos.length; i++) { nos[i] = i + 1; } return nos; } // 当前页小于展示页码一半,重头总展示 if (getCurrentPageNo() <= pageCount / 2) { int[] nos = new int[pageCount]; for (int i = 0; i < nos.length; i++) { nos[i] = i + 1; } return nos; } // 当前页与总页数差小于展示页一半,从尾部展示 if ((getTotalPageCount() - getCurrentPageNo()) <= pageCount / 2) { int[] nos = new int[pageCount]; for (int i = getLastPageNo() - pageCount, j = 0; j < pageCount; i++, j++) { nos[j] = i + 1; } return nos; } // 前后各取一半 int[] nos = new int[pageCount]; for (int i = getCurrentPageNo() - pageCount / 2, j = 0;j < pageCount;i++, j++) { nos[j] = i + 1; } return nos; } /** 获取任一页第一条数据在数据集的位置,每页条数使用默认值 */ protected static int getStartOfPage(int pageNo) { return getStartOfPage(pageNo, DEFAULT_PAGE_SIZE); } /** * 获取任一页第一条数据在数据集的位置. * @param pageNo 从1开始的页号 * @param pageSize 每页记录条数 * @return 该页第一条数据 */ public static int getStartOfPage(int pageNo, int pageSize) { return (pageNo - 1) * pageSize; } /** * @param pageCount the pageCount to set */ public void setPageCount(int pageCount) { this.pageCount = pageCount; } }
上一篇: DAO的演进
下一篇: jquery分页打印
推荐阅读
-
Spring Boot+Mybatis+Druid+PageHelper实现多数据源并分页的方法
-
Spring Boot+Mybatis+Druid+PageHelper实现多数据源并分页的方法
-
ASP.NET技巧:做个DataList可分页的数据源
-
ASP.NET技巧:做个DataList可分页的数据源
-
当查询的数据来自多个数据源,有哪些好的分页策略?
-
模拟ASP.Net分页的分页导航
-
在python中以相同顺序shuffle两个list的方法
-
抓取Js动态生成数据且以滚动页面方式分页的网页
-
模拟JavaScript Array实现的List
-
C#:如何把List
转换成以某个分隔符连接的字符串?