使用MybatisPlus对List数据进行分页
程序员文章站
2024-01-20 22:10:40
...
使用MybatisPlus对List数据进行分页
情形:客户提出需求,列表展示的数据需要先把所有的数据进行排序,然后再展示。分别有五个类别的数据,每个类别的排序条件不同。我寻思着,这还不简单。直接调用mybatisplus提供的selectPage方法,然后对查出的数据按照要求排序不就行了。数据查询处理之后,当前页的数据是进行了排序,但是并没有跟下一页的数据进行比对。所以,应该是先查出所有数据,然后在进行分页。
1、使用mybatisplus提供的selectList方法,查询所有数据。
List<EntranceVillage> villageList = villageMapper.selectList(new QueryWrapper<>());
2、使用stream流根据类别的排序条件进行排序
List<EntranceVillage> first = villageList.stream().filter(entranceVillage ->
EntranceConstants.ENTRANCE_FIRST.equals(entranceVillage.getApplyType()))
.distinct()
.collect(Collectors.toList());
List<EntranceVillage> second = villageList.stream().filter(entranceVillage ->
EntranceConstants.ENTRANCE_FIRST.equals(entranceVillage.getApplyType()))
.distinct()
.sorted(Comparator.comparing(EntranceVillage::getCreateDate))
.collect(Collectors.toList());
villageList.clear();
villageList.addAll(first);
villageList.addAll(second);
3、对数据进行计算处理,进行分页(计算方法借鉴于https://www.cnblogs.com/fengru/p/6703749.html
//当前页
int current = 1;
//每页数据条数
int size = 10;
Page<EntranceVillage> page = new Page<>(current,size);
int count = villageList.size();
List<EntranceVillage> pageList = new ArrayList<>();
//计算当前页第一条数据的下标
int currId = current>1 ? (current-1)*size:0;
for (int i=0; i<size && i<count - currId;i++){
pageList.add(villageList.get(currId+i));
}
page.setSize(size);
page.setCurrent(current);
page.setTotal(count);
//计算分页总页数
page.setPages(count %10 == 0 ? count/10 :count/10+1);
page.setRecords(pageList);