Java實(shí)現(xiàn)List集合手動分頁的方法
為方便測試,可以直接在 controller 內(nèi)添加一個(gè)方法,或者直接通過 main 方法測試
List 手動分頁
@GetMapping("/getUserInfo")
public Map<String,Object> getUserInfo(@RequestParam("pageNo") Integer pageNo,@RequestParam("pageSize") Integer pageSize){
if(null == pageNo){
pageNo = 1;
}
if(null == pageSize){
pageSize = 10;
}
List<User> userList = new ArrayList<>();
userList.add(new User(1,"奧迪1",23,"123@qq.com","地址1"));
userList.add(new User(2,"奧迪2",23,"124@qq.com","地址2"));
userList.add(new User(3,"奧迪3",23,"124@qq.com","地址3"));
userList.add(new User(4,"奧迪4",23,"125@qq.com","地址4"));
userList.add(new User(5,"奧迪4",23,"126@qq.com","地址5"));
userList.add(new User(6,"奧迪5",23,"127@qq.com","地址6"));
userList.add(new User(7,"奧迪6",23,"128@qq.com","地址7"));
userList.add(new User(8,"奧迪7",23,"129@qq.com","地址8"));
userList.add(new User(9,"奧迪7",23,"1219@qq.com","地址9"));
userList.add(new User(10,"奧迪10",23,"1231@qq.com","地址10"));
userList.add(new User(11,"奧迪11",23,"1232@qq.com","地址11"));
Integer limit = (pageNo-1)*pageSize;
Integer totalSize = userList.size();
// 方法一
Integer totalPage = totalSize % pageSize == 0 ? totalSize / pageSize : totalSize / pageSize + 1;
// 方法二(推薦)其中 pageSize-1 就是 totalSize/pageSize 的最大的余數(shù)
// Integer totalPage = (totalSize + pageSize -1) / pageSize;
// 方法三
// Integer totalPage = (int) Math.ceil(totalSize / pageSize);
if(pageNo > totalPage){
throw new RuntimeException("頁數(shù)超出了");
}
List<User> subList = null;
if(pageNo == totalPage){
// 最后一頁
subList = userList.subList(limit, totalSize);
}else{
Integer end= limit + pageSize;
// 截取的最后的下標(biāo)
subList = userList.subList(limit, end);
// 出現(xiàn)空值處理
// subList = CollectionUtils.isEmpty(userList) ? new ArrayList<>() : userList.subList(limit, Math.min(userList.size(), end));
}
Map<String,Object> map = new HashMap<>();
map.put("data",subList);
map.put("total",userList.size());
subList.forEach(System.out::println);
return map;
}
static class User{
private Integer id;
private String name;
private Integer age;
private String email;
private String address;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public User(Integer id, String name, Integer age, String email, String address) {
this.id = id;
this.name = name;
this.age = age;
this.email = email;
this.address = address;
}
@Override
public String toString() {
return "User{" +
"id='" + id + '\'' +
", name='" + name + '\'' +
", age=" + age +
", email='" + email + '\'' +
", address='" + address + '\'' +
'}';
}
}
計(jì)算總頁數(shù)方法
// totalPage 總頁數(shù),pageSize 每頁顯示多少條,totalSize 總條數(shù) // 方法一 Integer totalPage = totalSize % pageSize == 0 ? totalSize / pageSize : totalSize / pageSize + 1; // 方法二(推薦)其中 pageSize-1 就是 totalSize/pageSize 的最大的余數(shù) // Integer totalPage = (totalSize + pageSize -1) / pageSize; // 方法三 // Integer totalPage = (int) Math.ceil(totalSize / pageSize);
補(bǔ):
利用 Lists.partition() 方法進(jìn)行數(shù)據(jù)將數(shù)據(jù)切割分頁
List<UserEntity> resultList = new ArrayList<>(); // 將數(shù)據(jù)按照傳過來頁長進(jìn)行切割
List<List<UserEntity>> partition = Lists.partition(userList,pageSize);
for (int i = 0; i < partition.size(); i++) {
if (i == pageIndex){
resultList = partition.get(pageIndex);
}
}利用封裝的分頁工具進(jìn)行分頁
(1)分頁工具
/**
* @project
* @Description 對List集合進(jìn)行份分頁
* @Author songwp
* @Date 2023/5/12 13:55
**/
public class ListPagingUtil {
private Integer currentPage;//當(dāng)前頁
private Integer pageSize;//每頁顯示記錄條數(shù)
private Integer totalPage;//總頁數(shù)
private Integer star;//開始數(shù)據(jù)
private Integer total;//總條數(shù)
private List<?> dataList;//每頁顯示的數(shù)據(jù)
public Integer getCurrentPage() {
return currentPage;
}
public void setCurrentPage(Integer currentPage) {
this.currentPage = currentPage;
}
public Integer getPageSize() {
return pageSize;
}
public void setPageSize(Integer pageSize) {
this.pageSize = pageSize;
}
public Integer getTotalPage() {
return totalPage;
}
public void setTotalPage(Integer totalPage) {
this.totalPage = totalPage;
}
public List<?> getDataList() {
return dataList;
}
public void setDataList(List<?> dataList) {
this.dataList = dataList;
}
public Integer getStar() {
return star;
}
public void setStar(Integer star) {
this.star = star;
}
public Integer getTotal() {
return total;
}
public void setTotal(Integer total) {
this.total = total;
}
@Override
public String toString() {
return "ListPagingUtil{" +
"currentPage=" + currentPage +
", pageSize=" + pageSize +
", totalPage=" + totalPage +
", dataList=" + dataList +
", star=" + star +
", total=" + total +
'}';
}
public void pageStartInfo(Integer currentPage, Integer pageSize){
//如果傳入的pageNumber為null給pageNumber賦為1
currentPage = currentPage == null ? 1 : currentPage;
//如果傳入的pageSize為null給pageSize賦為10
pageSize = pageSize == null ? 10 : pageSize;
this.setCurrentPage(currentPage);
this.setPageSize(pageSize);
}
public static ListPagingUtil paging(Integer currentPage, Integer pageSize, List<?> list) {
ListPagingUtil pagingUtil = new ListPagingUtil();
//初始化
pagingUtil.pageStartInfo(currentPage, pageSize);
//設(shè)置起始數(shù)據(jù)
pagingUtil.setStar((pagingUtil.getCurrentPage()-1)*pagingUtil.getPageSize());
//設(shè)置總數(shù)
pagingUtil.setTotal(list.size());
//設(shè)置總頁數(shù)
pagingUtil.setTotalPage(pagingUtil.getTotal() % pagingUtil.getPageSize() == 0 ? pagingUtil.getTotal()/pagingUtil.getPageSize() :pagingUtil.getTotal()/pagingUtil.getPageSize()+1);
//截取list
pagingUtil.setDataList(list.subList(pagingUtil.getStar(), pagingUtil.getTotal()-pagingUtil.getStar()>pagingUtil.getPageSize()?pagingUtil.getStar()+pagingUtil.getPageSize():pagingUtil.getTotal()));
return pagingUtil;
}
}(2)方法調(diào)用
ListPagingUtil.paging(pageIndex,pageSize, userList)
利用 stream進(jìn)行分頁 處理
方法一:
List<List<CompanyStaffEquipStatisticVO>> partition = ListUtils.partition(result, param.getPageSize());
List<CompanyStaffEquipStatisticVO> companyStaffEquipStatisticVOS = param.getPageIndex() > partition.size() ? new ArrayList<>() : partition.get(param.getPageIndex() - 1);
SafePageParam safePageParam = new SafePageParam();
safePageParam.setPage(true);
safePageParam.setPageSize(param.getPageSize());
PageVO<CompanyStaffEquipStatisticVO> voResult = new PageVO<>(safePageParam, companyStaffEquipStatisticVOS, result.size());
if (param.getPageIndex()*param.getPageSize()<result.size()) {
voResult.setHasNext(true);
}
return voResult;方法二:
List<VendorExcelVO> resultVO = getVendorProjectListInfo(param);
PageVO<VendorExcelVO> voPageVO = new PageVO<>();
List<VendorExcelVO> collectList = resultVO.stream().skip((param.getPageIndex() - 1) * param.getPageSize()).limit(param.getPageSize()).collect(Collectors.toList());
voPageVO.setPage(true);
voPageVO.setPageSize(param.getPageSize());
voPageVO.setCount(resultVO.size());
voPageVO.setList(collectList);
if (param.getPageIndex() * param.getPageSize() < resultVO.size()){
voPageVO.setHasNext(true);
}
return voPageVO;到此這篇關(guān)于Java實(shí)現(xiàn)List集合手動分頁的方法的文章就介紹到這了,更多相關(guān)Java List集合手動分頁內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- java集合List快速實(shí)現(xiàn)重復(fù)判斷的方法小結(jié)
- Java?hutool?List集合對象拷貝示例代碼
- java的list集合排序自定義元素方式
- Java中hutool?List集合對象拷貝案例代碼
- Java將不同的List集合復(fù)制到另一個(gè)集合常見的方法
- Java?List集合取交集的五種常見方式總結(jié)
- Java?List集合取交集的8種不同實(shí)現(xiàn)方式總結(jié)
- java取出list中某幾個(gè)屬性組成一個(gè)新集合的幾種方式
- java如何獲取兩個(gè)List集合之間的交集、差集、并集
- Java中Set集合轉(zhuǎn)為List集合常見的兩種方式
- Java集合中的List超詳細(xì)講解
相關(guān)文章
分析java中全面的單例模式多種實(shí)現(xiàn)方式
單例模式是一種常用的軟件設(shè)計(jì)模式,單例對象的類只能允許一個(gè)實(shí)例存在。許多時(shí)候整個(gè)系統(tǒng)只需要擁有一個(gè)的全局對象,有利于協(xié)調(diào)系統(tǒng)整體的行為。比如在某個(gè)服務(wù)器程序中,該服務(wù)器的配置信息存放在一個(gè)文件中。本文將介紹它的思想和多種實(shí)現(xiàn)方式2021-06-06
手寫redis@Cacheable注解?支持過期時(shí)間設(shè)置方式
這篇文章主要介紹了手寫redis@Cacheable注解?支持過期時(shí)間設(shè)置方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
SpringMVC中@controllerAdvice注解的詳細(xì)解釋
剛接觸SpringMVC應(yīng)該很少會見到這個(gè)注解,其實(shí)它的作用非常大,下面這篇文章主要給大家介紹了關(guān)于SpringMVC中@controllerAdvice注解的相關(guān)資料,需要的朋友可以參考下2022-02-02
解析spring事務(wù)管理@Transactional為什么要添加rollbackFor=Exception.class
這篇文章主要介紹了spring事務(wù)管理@Transactional為什么要添加rollbackFor=Exception.class,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11
SpringBoot啟動后自動執(zhí)行初始化任務(wù)的五種方法
在 Spring Boot 開發(fā)中,我們經(jīng)常需要在應(yīng)用啟動后立即執(zhí)行初始化任務(wù),本文將深度解析 ??5 種主流實(shí)現(xiàn)方案??,大家可以根據(jù)自己的需求自行選擇2025-04-04
基于Beanutils.copyProperties()的用法及重寫提高效率
這篇文章主要介紹了Beanutils.copyProperties( )的用法及重寫提高效率的操作,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09

