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