使用MybatisPlus对List数据进行分页

使用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);
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值