背景:查询的数据在一张表里面/或通过自定义sql连表查询出来的结果都可以通过普通分页/自定义sql分页进行实现
需要解决的问题:但对统计的数据无法直接进行分页查询,需要对最终的查询结果进行分页处理
//根据条件进行查询--普通分页
@Override
public MyPage<Name> queryAllName(Integer currentPage, Integer pageSize) {
Page<Name> page = new Page<>(currentPage, pageSize);
QueryWrapper<Name> queryWrapper = new QueryWrapper<>();
...
...
IPage<Name> iPage = baseMapper.selectPage(page, queryWrapper);
return new MyPage<>(iPage.getTotal(), iPage.getRecords());
}
//对查询结果进行分页--特殊处理
@Overrode
public MyPage<Name> queryAllName(Integer currentPage, Integer pageSize) {
Mypage<Name> = dto = new MyPage<>();
List<Name> gameList = new ArrayList<>();
...
...
//结果分页
List<List<Name>> averageList = ListUtils.averageAssign(gameList, PageEnum.SIZE_20.getSize());
//设置值
List<Name> resultPage = averageList.get(currentPage-1);
dto.setList(resultPage);
return dto;
}
//工具类
public class ListUtils<T> {
/**
* 将list集合按n个数划分
*
* @param source 源集合
* @param n 划分个数
* @param <T> 范型
* @return 目标集合
*/
public static <T> List<List<T>> averageAssign(List<T> source, int n) {
if (n <= 0) {
return Collections.emptyList();
}
List<List<T>> list = new ArrayList<>();
int sourceSize = source.size();
int finalNum = n;
for (int i = 0; i < sourceSize; i += n) {
if (i + n > sourceSize) {
finalNum = sourceSize - i;
}
list.add(source.subList(i, i + finalNum));
}
return list;
}
}