Java内存分页工具类

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

PageUtil.java

package com.cnblogs.cikai;

import com.cnblogs.cikai.BaseInfoBean;

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

/**
 * 内存分页工具类
 *
 * @author cikai 
 * @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 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]
     * 

* [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 pagingIds(BaseInfoBean bean, List 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 
 * @date 02/27/2020
 */
public class BaseInfoBean {

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

    // TODO: 生成 Getter 和 Setter 方法
}

你可能感兴趣的:(java,开发语言,后端)