java内存分页工具类

package com.fp.coupon.utils;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

/**
 * @author hanzl
 * @date 2020/9/14 10:01 上午
 * 内存分页
 */
public class RAMPagerUtils<T> {
  private List<T> data;
  private int pageSize;

  /**
   * @param data     原始数据
   * @param pageSize 每页条数
   */
  public RAMPagerUtils (List<T> data, int pageSize) {
    this.data = data;
    this.pageSize = pageSize;
  }

  /**
   * 获取某页数据,从第1页开始
   *
   * @param pageNum 第几页
   * @return 分页数据
   */
  public List<T> page(int pageNum) {
    if (pageNum < 1) {
      pageNum = 1;
    }
    int from = (pageNum - 1) * pageSize;
    int to = Math.min(pageNum * pageSize, data.size());
    if (from > to) {
      from = to;
    }
    return data.subList(from, to);
  }

  /**
   * 获取总页数
   */
  public int getPageCount() {
    if (pageSize == 0) {
      return 0;
    }
    return data.size() % pageSize == 0 ? (data.size() / pageSize) : (data.size() / pageSize + 1);
  }

  /**
   * 元素迭代器
   */
  public Iterator<List<T>> iterator() {
    return new Itr();
  }

  private class Itr implements Iterator<List<T>> {
    int page = 1;

    Itr() {
    }

    @Override
    public boolean hasNext() {
      return page <= getPageCount();
    }

    @Override
    public List<T> next() {
      int i = page;
      if (i > getPageCount())
        return new ArrayList<>();

      page = i + 1;
      return RAMPagerUtils.this.page(i);
    }
  }

  public static void main(String[] args) {
    List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
    System.out.println("原始数据是:" + list);

    int pageSize = 2;
    System.out.println("每页大小是:" + pageSize);

    RAMPagerUtils<Integer> pager = new RAMPagerUtils<Integer>(list, pageSize);
    System.out.println("总页数是: " + pager.getPageCount());

    System.out.println("<- - - - - - - - - - - - - ->");

    // 无需感知页码情况下使用
    Iterator<List<Integer>> iterator = pager.iterator();
    while (iterator.hasNext()) {
      List<Integer> next = iterator.next();
      System.out.println("next: " + next);
    }

    System.out.println("<- - - - - - - - - - - - - ->");
    // 需要指定页码情况使用,页码从第一页开始,且小于等于总页数!
    for (int i = 1; i <= pager.getPageCount(); i++) {
      List<Integer> page = pager.page(i);
      System.out.println("第 " + i + " 页数据是:" + page);
    }
  }
}

使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值