Java内存分页工具类

以下是我写的 Java 内存分页工具类,可以直接使用。如有 Bug,欢迎评论指点!

PageUtil.java

package com.cnblogs.cikai;

import com.cnblogs.cikai.BaseInfoBean;

import java.util.ArrayList;
import java.util.List;

/**
 * 内存分页工具类
 *
 * @author cikai <cikai0923@foxmail.com>
 * @date 02/27/2020
 */
public class PageUtil {

    // 默认第 1 页
    private final static Integer DEFAULT_PAGE = 1;
    // 默认每页 10 条
    private final static Integer DEFAULT_ROWS = 10;

    /**
     * 分页实现
     *
     * @param bean,参数主体,包含page(页数)和rows(条数)
     * @param dataList,待分页数据集合
     * @return 分页后的数据
     */
    public static Object paging(BaseInfoBean bean, List<? extends BaseInfoBean> dataList) {
        int start = 0;
        int end = 0;
        if (bean.getRows() == null) {
            bean.setRows(DEFAULT_ROWS);
        }
        if (bean.getPage() == null) {
            bean.setPage(DEFAULT_PAGE);
        } else {
            start = (bean.getPage() - 1) * bean.getRows();
        }
        end = Math.min((bean.getPage() * bean.getRows()), dataList.size());
        if (start < 0 || end < 0) {
            return new ArrayList<>();
        }
        if (start < end) {
            return dataList.subList(start, end);
        }
        return new ArrayList<>();
    }

    /**
     * 分页转换,从 [page, rows] 转换为 [page, offset]
     * <p>
     * [page, rows] => [第M页,每页N条]
     * [page, offset] => [每页X条,从第Y个开始]
     *
     * @param bean
     * @return
     */
    public static BaseInfoBean rowsToOffset(BaseInfoBean bean) {
        BaseInfoBean pageOffset = new BaseInfoBean();
        if (bean.getPage() == null) {
            pageOffset.setPage(bean.getRows());
            return pageOffset;
        }
        if (bean.getRows() == null) {
            return new BaseInfoBean();
        }
        pageOffset.setPage(bean.getRows());
        pageOffset.setOffset((bean.getPage() - 1) * bean.getRows());
        if (pageOffset.getPage() < 0 || pageOffset.getOffset() < 0) {
            return new BaseInfoBean();
        }
        return pageOffset;
    }

    /**
     * ID分页实现
     *
     * @param bean,参数主体,包含page(页数)和rows(条数)
     * @param ids,待分页id集合
     * @return 分页后的id集合
     */
    public static List<Long> pagingIds(BaseInfoBean bean, List<Long> ids) {
        int start = 0;
        int end = 0;
        if (bean.getRows() == null) {
            bean.setRows(DEFAULT_ROWS);
        }
        if (bean.getPage() == null) {
            bean.setPage(DEFAULT_PAGE);
        } else {
            start = (bean.getPage() - 1) * bean.getRows();
        }
        end = Math.min((bean.getPage() * bean.getRows()), ids.size());
        if (start < 0 || end < 0) {
            return new ArrayList<>();
        }
        if (start < end) {
            return ids.subList(start, end);
        }
        return new ArrayList<>();
    }
}

BaseInfoBean.java

package com.cnblogs.cikai;

/**
 * 业务数据基类
 *
 * @author cikai <cikai0923@foxmail.com>
 * @date 02/27/2020
 */
public class BaseInfoBean {

    /**
     * 第几页
     */
    private Integer page;
    /**
     * 每页的条数
     */
    private Integer rows;
    /**
     * 偏移量,当页从第几条数据开始
     */
    private Integer offset;
    /**
     * 业务数据结构定义
     */
    private Object data;

    // TODO: 生成 Getter 和 Setter 方法
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值