List转Page对象,看这篇就够了,附代码、实验结果&分页自己编程实现

本文介绍了如何将List转换为Page对象以实现分页显示,提供了两种方法,并强调了在大数据量下直接在内存中转换的潜在问题。文章还提到了SQL中的分页逻辑,并建议对于大量数据,应在数据库层面进行分页操作。此外,文章链接了一个关于自实现分页的详细教程。
摘要由CSDN通过智能技术生成

List 转 Page 对象

处理统计等数据时分页展示、第三方接口仅返回list,需分页显示等需求

public class ConvertList2PageVOUtil {
    /**
     * List 转 Page 对象
     * @param list
     * @param page 必须大于0
     * @param size 必须大于0
     * @param <T>
     * @return
     */
    public static <T> Page<T> convertList2PageVO(final List<T> list, final Integer page, final Integer size) {
        if (page < 1 && size < 1){
            throw new BaseRetException(BaseRet.createFailureRet("页参数或页大小参数错误!"));
        }
        Pageable pageable = new PageRequest(page - 1, size);
        if (CollectionUtils.isEmpty(list)) {
            return new PageImpl<>(new ArrayList<>(0), pageable, 0);
        }
        final List<T> ingredientVOS = list;
        final List<List<T>> partition = Lists.partition(list, pageable.getPageSize());
        List<T> pageContent = partition.get(pageable.getPageNumber());
        return new PageImpl<>(pageContent, pageable, ingredientVOS.size());
    }

    /**
     * List 转 Page 对象
     * @param list
     * @param pageable 分页参数
     * @param <T>
     * @return
     */
    public static <T> Page<T> convertList2PageVO(final List<T> list,final Pageable pageable) {
        if (CollectionUtils.isEmpty(list)) {
            return new PageImpl<>(new ArrayList<>(0), pageable, 0);
        }
        final List<T> ingredientVOS = list;
        final List<List<T>> partition = Lists.partition(list, pageable.getPageSize());
        List<T> pageContent = partition.get(pageable.getPageNumber());
        return new PageImpl<>(pageContent, pageable, ingredientVOS.size());
    }

}

测试:

/**
 * @Author: Be_insighted
 * Description:
 * @date Create on 2020/7/10 9:38
 **/
@Slf4j
public class TestConvertList2PageObject {
    public static void main(String[] args) {
        List<User> users = new ArrayList<>();
        User user0 = new User().setAge(60).setNickname("稀烂的").setUsername("好美国儿童");
        User user1 = new User().setAge(60).setNickname("基鑫哥").setUsername("基佬");
        User user2 = new User().setAge(60).setNickname("奥巴驴").setUsername("核ping");
        User user3 = new User().setAge(60).setNickname("懂王").setUsername("狗屎");
        users.add(user0);
        users.add(user1);
        users.add(user2);
        users.add(user3);
        Page<User> ret = ConvertList2PageVOUtil.convertList2PageVO(users, 1, 2);
        log.info("测试0:{}===={}===={}===={}",    ret.getContent(),ret.getTotalElements(),ret.getTotalPages(),ret.getNumberOfElements());
        int page = 1;
        int size = 2;
        Pageable pageable = new PageRequest(page - 1, size);
        Page<User> ret1 = ConvertList2PageVOUtil.convertList2PageVO(users, pageable);
        log.info("测试1:{}===={}===={}===={}",   ret1.getContent(),ret1.getTotalElements(),ret1.getTotalPages(),ret.getNumberOfElements());

    }
}

第一页内容

第二页内容

忽略谐音

自己实现分页

如果您的数据量不大,使用文中这种方法是可以的。如果您的业务数据大,请慎用!

实际上在SQL中进行分页的逻辑不过是:

select * from table where 条件 limit n offset m 而已!

外加 select count(*) from table where 条件;

然后业务里根据请求的参数进行计算页数、当前页数据量

如果您刚开始接触分页,不使用第三方实现,可以自己实现,请参考这篇文章

自己实现分页icon-default.png?t=M4ADhttps://blog.csdn.net/Be_insighted/article/details/120496068?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522165225635516782248524759%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=165225635516782248524759&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-2-120496068-null-null.nonecase&utm_term=%E5%88%86%E9%A1%B5&spm=1018.2226.3001.4450

  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值