欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

以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;
	}

	
}

 

 

 

 

 

相关标签: list page 分页

上一篇: DAO的演进

下一篇: jquery分页打印