以list模拟数据源的分页

	/**
	 * 分页
	 * @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;
	}

	
}

猜你喜欢

转载自tjy86.iteye.com/blog/2365453
今日推荐