前言
在日常开发过程中,将查询的数据进行分页处理是非常常见的需求,而有时候 PageHelper的 startPage 方法对查询数据进行分页后,我们需要对这数据集进行再处理,而导致分页数据丢失一部分,只能查询第一页的数据。所以我们可以先做业务处理得到数据集,最终使用 Java 8 的 stream 的 skip 方法进行分页处理。
一、业务代码
public PageInfo<Object> finishedTask(QueryCondition condition) {
// 当前页
int pageNum = condition.getPage();
// 当前数量
int pageSize = condition.getPageSize();
// 数据集合
List<Object> list = queryByCondition(condition);
// 数据总数
int total = list.size();
// 使用stream的skip方法跳过实现
List<Object> pageList = list.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
PageInfo<Object> pageInfo = new PageInfo<>(pageList);
pageInfo.setPageNum(pageNum);
pageInfo.setPageSize(pageSize);
pageInfo.setPages(total / pageSize + 1);
pageInfo.setTotal(total);
return pageInfo;
}