用stream流 手动封装分页工具类

用stream流 手动封装分页工具类

一般我们都是用mybatis-plus自带的分页直接查询

我们也可能遇到前端需要展示多表的分页

一般是通过主干单表分页查询后,其他需要的显示的数据也是单表查询变成map,再封装返回前端

也可以通过创建视图,再直接用分页查询返回

但是可能遇到更复杂的场景,像我遇到的就是 一条数据展示 一张表的不同类型,前端需要展示 最高零售价 公司零售价 会员价,

他们是一张表的,我要以公司零售价为主干(还要通过其他表进行筛选,另外的则根另外表进行筛选),最后再封装回去

我的思路是哪些数据从哪张表获取,那我就一次查那张表,然后通过逻辑进行筛选,减少数据库连接,后来就写了下面的工具类

package com.yblue.utils;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.assertj.core.util.Lists;
import org.springframework.util.CollectionUtils;

import java.util.List;
import java.util.stream.Collectors;

/**
 * @author JiaXinMa
 * @description 分页工具
 * @date 2021/12/16
 */
public class PageUtil {

    /**
     * @author: JiaXinMa
     * @description: 获取分页数据
     * @date: 2021/12/16
     */
    public static <T> Page<T> getPageData(List<T> items, Page page) {

        if (CollectionUtils.isEmpty(items)) {
            page.setTotal(0);
            page.setPages(0);
            return page;
        }

        page.setTotal(items.size());
        page.setPages(items.size() % page.getSize() == 0 ? items.size() / page.getSize() : items.size() / page.getSize() + 1);

        return page.setRecords(items.stream().skip(page.getSize() * (page.getCurrent() - 1)).limit(page.getSize()).collect(Collectors.toList()));
    }

    /**
     * @author: JiaXinMa
     * @description: 获取集合指定范围的数据
     * @date: 2021/12/16
     * 如果启始索引大于终止索引,返回空集合
     */
    public static <T> List<T> getDataBetweenIndex(List<T> list, int startIndex, int endIndex) {
        return CollectionUtils.isEmpty(list) ? list : endIndex < startIndex ? Lists.newArrayList() : list.stream().skip(startIndex).limit(endIndex - startIndex).collect(Collectors.toList());
    }
}

想看更多精彩内容,可以关注我的博客园
我的博客园

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值