用pageInfo对List手工分页
因業務需要,需對List,進行分頁。
List來源,多種多樣,有時不能用數據庫發送sql來進行limit的分頁
思路:
1.對List數組來源,進行subList的截取,類似于數據庫發送limit。
2.構建一個pageinfo的工具類。
List<Description> descriptionByCategoryList = descriptionService.getDescriptionByCategoryList(20);
int fromIndex = 0;
int toIndex = 0;
int pageSize = 20;
int pageIndex = pn;
int total = descriptionByCategoryList.size(); // 取出總記錄數
if (total / pageSize == 0 && total % pageSize > 0) {
fromIndex = 0;
toIndex = total;
} else {
if (total / pageSize >= 1 && total % pageSize >= 0) {
fromIndex = pageSize * (pageIndex - 1);
if (pageSize * pageIndex >= total) {
toIndex = total;
} else {
toIndex = pageSize * pageIndex;
}
}
}
//做pn越界處理
try {
descriptionByCategoryList =descriptionByCategoryList.subList(fromIndex, toIndex);
} catch (IndexOutOfBoundsException e) {
fromIndex = 0;
toIndex= pageSize;
descriptionByCategoryList =descriptionByCategoryList.subList(fromIndex, toIndex);
}catch(IllegalArgumentException e) {
fromIndex = total-pageSize;
toIndex =total;
descriptionByCategoryList =descriptionByCategoryList.subList(fromIndex, toIndex);
}
descriptionByCategoryList = descriptionByCategoryList.subList(fromIndex, toIndex); //進行分頁
PageInfo<Description> page = new PageInfo<Description>(descriptionByCategoryList, 7);
page = PageHelperTool.initPageInfoObj(pageIndex, total, pageSize, page); //調用分頁工具
mv.addObject("pageinfo", page);
分頁工具類
package cn.taotao.utils;
import com.github.pagehelper.PageInfo;
/**
* @Title: PageHelperTool.java
* @Package
* @Description: 分頁工具類
*/
public class PageHelperTool {
/**
* PageHelper中,如果當前頁是最后一頁,則返回的nextPage是0,即首頁,而有時我們需要最后一頁的nextPage是lastPage,因此寫此方法
*
* @param currentPage
* @param pageObj
* @return
*/
public static <T> PageInfo<T> lastPageSetNextPage(int currentPage, PageInfo<T> pageObj) {
if (currentPage == pageObj.getPages()) {
pageObj.setNextPage(pageObj.getPages());
}
return pageObj;
}
public static <T> PageInfo<T> initPageInfoObj(int currentPage, int total, int pageSize, PageInfo<T> pageInfo) {
pageInfo.setNextPage(currentPage < ((total + pageSize - 1) / pageSize) ? currentPage + 1 : currentPage);
pageInfo.setTotal(total);
pageInfo.setPageNum(currentPage);
pageInfo.setPages((total + pageSize - 1) / pageSize);
pageInfo.setLastPage((total + pageSize - 1) / pageSize);
pageInfo.setPrePage(currentPage > 1 ? currentPage - 1 : currentPage);
pageInfo.setIsFirstPage(currentPage == 1 ? true : false);
pageInfo.setIsLastPage(currentPage == (total + pageSize - 1) / pageSize ? true : false);
pageInfo.setHasPreviousPage(currentPage == 1 ? false : true);
pageInfo.setHasNextPage(currentPage == (total + pageSize - 1) / pageSize ? false : true);
return calcNavigatepageNums(pageInfo);
}
private static <T> PageInfo<T> calcNavigatepageNums(PageInfo<T> pageInfo) {
// 當總頁數小于或等于導航頁碼數時
if (pageInfo.getPages() <= pageInfo.getNavigatePages()) {
pageInfo.setNavigatepageNums(new int[pageInfo.getPages()]);
for (int i = 0; i < pageInfo.getPages(); i++) {
pageInfo.getNavigatepageNums()[i] = i + 1;
}
} else { // 當總頁數大于導航頁碼數時
pageInfo.setNavigatepageNums(new int[pageInfo.getNavigatePages()]);
int startNum = pageInfo.getPageNum() - pageInfo.getNavigatePages() / 2;
int endNum = pageInfo.getPageNum() + pageInfo.getNavigatePages() / 2;
if (startNum < 1) {
startNum = 1;
// (最前navigatePages頁
for (int i = 0; i < pageInfo.getNavigatePages(); i++) {
pageInfo.getNavigatepageNums()[i] = startNum++;
}
} else if (endNum > pageInfo.getPages()) {
endNum = pageInfo.getPages();
// 最后navigatePages頁
for (int i = pageInfo.getNavigatePages() - 1; i >= 0; i--) {
pageInfo.getNavigatepageNums()[i] = endNum--;
}
} else {
// 所有中間頁
for (int i = 0; i < pageInfo.getNavigatePages(); i++) {
pageInfo.getNavigatepageNums()[i] = startNum++;
}
}
}
return pageInfo;
}
}
題外另外,需要在排序的類,重寫自定義compare的規則。就是說,讓他知道如何排序
總結
以上是生活随笔為你收集整理的用pageInfo对List手工分页的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql创建函数失败_mysql创建函
- 下一篇: python中函数定义可以不包括什么_P