内存分页实现

3 篇文章 0 订阅

需求背景:

最近写了一个适配项目,需要对接N个第三方系统,有的第三方数据是自带物理分页,有的则是数据直接全部返回。如果提需求,沟通和效率都是大打折扣,所以自己实现一个内存分页工具,在这里记录一下。

package common.utils;

import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils;

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

/**
 *  @author    hetao
 *  @date      2021/4/23 18:18
 *  @description 内存分页
 */
public class MemoryPager<T> {

    /**
     * 总供多少页
     */
    private int pageCount;

    private List<T> data;

    /**
     * 第几页
     */
    private int pageNum;
    /**
     * 页码大小
     */
    private int pageSize;

    /**
     * 总共有多少条数据
     */
    private int total;

    public MemoryPager(List<T> data, int pageNum, int pageSize) {
        this.data = data;
        this.pageNum = pageNum > 0 ? pageNum : 1;
        this.pageSize = pageSize;
        //初始化总条数
        if(ObjectUtils.isEmpty(data)){
            this.total = 0;
        }else{
            this.total = data.size();
        }
    }

    public List<T> getData() {
        if (CollectionUtils.isEmpty(this.data)) {
            return Collections.emptyList();
        }
        int totalCount = this.data.size();
        int remainder = totalCount % pageSize;
        this.pageCount = (remainder > 0) ? totalCount/pageSize + 1 : totalCount/pageSize;
        if (remainder == 0) {
            return this.data.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
        } else {
            if (pageNum == pageCount) {
                return this.data.stream().skip((pageNum - 1) * pageSize).limit(totalCount).collect(Collectors.toList());
            } else {
                return this.data.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
            }
        }
    }

    public int getPageNum() {
        return pageNum;
    }

    public int getPageSize() {
        return pageSize;
    }

    public int getPageCount() {
        return pageCount;
    }

    public int getTotal() {
        return total;
    }
}

备注:数据量大了还是要考虑物理分页的,这个内存分页只是适用于小数据量的场景,如有问题,欢迎微信交流,微信:hetaolife

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值