import com.alibaba.fastjson2.JSONObject;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
/**
* @Description 分页工具
* @Author WangKun
* @Date 2023/4/27 17:50
* @Version
*/
public class PageUtils<T> {
// 分页数据
private final List<T> data;
// 每页显示多少数据
private final int pageSize;
/**
* @param data 分页数据
* @param pageSize 每页条数
* @Description
* @Throws
* @Return
* @Date 2023-04-27 17:55:14
* @Author WangKun
*/
public PageUtils(List<T> data, int pageSize) {
this.data = data;
this.pageSize = pageSize;
}
/**
* @param pageNum 第几页
* @Description 获取某页数据,从第1页开始
* @Throws
* @Return java.util.List<T> 分页数据
* @Date 2023-04-27 17:55:50
* @Author WangKun
*/
public List<T> page(int pageNum) {
if (pageNum < 1) {
pageNum = 1;
}
int from = (pageNum - 1) * pageSize;
int to = Math.min(pageNum * pageSize, data.size());
if (from > to) {
from = to;
}
return data.subList(from, to);
}
/**
* @param
* @Description 获取总页数
* @Throws
* @Return int
* @Date 2023-04-27 17:56:14
* @Author WangKun
*/
public int getPageCount() {
if (pageSize == 0) {
return 0;
}
return data.size() % pageSize == 0 ? (data.size() / pageSize) : (data.size() / pageSize + 1);
}
/**
* @param
* @Description 元素迭代器
* @Throws
* @Return java.util.Iterator<java.util.List < T>>
* @Date 2023-04-27 17:56:21
* @Author WangKun
*/
public Iterator<List<T>> iterator() {
return new Itr();
}
/**
* @Description
* @Throws
* @Return
* @Date 2023-04-27 17:56:47
* @Author WangKun
*/
private class Itr implements Iterator<List<T>> {
int page = 1;
Itr() {
}
public boolean hasNext() {
return page <= getPageCount();
}
public List<T> next() {
int i = page;
if (i > getPageCount())
return new ArrayList<>();
page = i + 1;
return PageUtils.this.page(i);
}
}
/**
* @param data 数据
* @param pageSize 每页显示多少数据
* @Description List分页 (无需指定页码)
* @Throws
* @Return java.util.List<com.alibaba.fastjson2.JSONObject>
* @Date 2023-05-04 17:23:52
* @Author WangKun
*/
public static List<JSONObject> getPageList(List<JSONObject> data, int pageSize) {
List<JSONObject> list = new ArrayList<>();
if (null == data || data.size() == 0) {
return list;
}
PageUtils<JSONObject> pager = new PageUtils<>(data, pageSize);
JSONObject obj = new JSONObject();
JSONObject pageData = new JSONObject();
Iterator<List<JSONObject>> iterator = pager.iterator();
// 无需指定页码
int i = 0;
while (iterator.hasNext()) {
List<JSONObject> next = iterator.next();
pageData.put(String.valueOf(++i), next);
}
obj.put("page", pageData);
obj.put("totalCount", data.size());
obj.put("totalPage", pager.getPageCount());
obj.put("pageSize", pageSize);
list.add(obj);
return list;
}
/**
* @param data 数据
* @param pageSize 每页显示多少数据
* @param currPage 当前页数(页码)
* @Description List分页(指定页码情况使用 , 页码从第一页开始 , 且小于等于总页数 !)
* @Throws
* @Return java.util.List<com.alibaba.fastjson2.JSONObject>
* @Date 2023-05-04 17:28:31
* @Author WangKun
*/
public static List<JSONObject> getPageList(List<JSONObject> data, int pageSize, int currPage) {
List<JSONObject> list = new ArrayList<>();
if (null == data || data.size() == 0) {
return list;
}
int size = data.size();
if (currPage > size) {
return list;
}
PageUtils<JSONObject> pager = new PageUtils<>(data, pageSize);
JSONObject obj = new JSONObject();
JSONObject pageData = new JSONObject();
// 指定页码情况使用,页码从第一页开始,且小于等于总页数!
for (int i = currPage; i <= pager.getPageCount(); i++) {
List<JSONObject> page = pager.page(i);
pageData.put(String.valueOf(i), page);
}
obj.put("page", pageData);
obj.put("totalCount", size);
obj.put("totalPage", pager.getPageCount());
obj.put("pageSize", pageSize);
list.add(obj);
return list;
}
调用:
List<JSONObject> listObj = PageUtils.getPageList( 数据,每页显示多少);
List<JSONObject> listObj = PageUtils.getPageList( 数据,每页显示多少,页码(必须小于等于总数));