List 分頁工具類,一勞永逸

有時候經常需要對List進行分批處理,就搞個工具類,使用類似迭代器模式

package com.xiao.springcloud.demo.common.util;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CopyOnWriteArrayList;

/**
 * [簡要描述]: List 分頁工具
 * [詳細描述]:
 *
 * @author xiaolinlin
 * @version 1.0, 2020/1/15 09:38
 * @since JDK 1.8
 */
public final class ListPageUtil<T>
{
    private CopyOnWriteArrayList<T> list;
    private int pageSize = 0;
    private int pageCount = 0;
    private int listSize = 0;
    private int index = 0;

    /**
     * [簡要描述]:List分頁工具初始化<br/>
     * [詳細描述]:<br/>
     *
     * @param list : 待分頁的數據集
     * @param pageSize : 每頁數
     * @return xiaolinlin  2020/1/15 - 10:02
     **/
    public ListPageUtil(List<T> list, int pageSize)
    {
        if (null == list || 0 == list.size())
        {
            throw new UnsupportedOperationException("List can not null!");
        }

        if (0 == pageSize)
        {
            throw new UnsupportedOperationException("Page size can not 0");
        }

        this.list = new CopyOnWriteArrayList<>(list);
        this.listSize = list.size();

        if (pageSize > listSize)
        {
            this.pageSize = listSize;
        }
        else
        {
            this.pageSize = pageSize;
        }

        this.pageCount = listSize / pageSize;
        this.pageCount = listSize % pageSize == 0 ? pageCount : pageCount + 1;
        this.index = 0;
    }

    /**
     * [簡要描述]:獲取首頁<br/>
     * [詳細描述]:<br/>
     *
     * @return java.util.List<T>
     * xiaolinlin  2020/1/15 - 10:02
     **/
    public List<T> getFistPage()
    {
        return list.subList(0, pageSize);
    }

    /**
     * [簡要描述]:獲取最後一頁<br/>
     * [詳細描述]:<br/>
     *
     * @return java.util.List<T>
     * xiaolinlin  2020/1/15 - 10:03
     **/
    public List<T> getLastPage()
    {
        return list.subList((pageCount - 1) * pageSize, listSize);
    }

    /**
     * [簡要描述]:獲取下一頁<br/>
     * [詳細描述]:<br/>
     *
     * @return java.util.List<T>
     * xiaolinlin  2020/1/15 - 10:03
     **/
    public List<T> nextPage()
    {
        List<T> subList = null;
        if (index == pageCount - 1)
        {
            subList = list.subList(index * pageSize, listSize);
        }
        else
        {
            subList = list.subList(index * pageSize, (index + 1) * pageSize);
        }
        index++;
        return subList;
    }

    /**
     * [簡要描述]:是否有下一頁<br/>
     * [詳細描述]:<br/>
     *
     * @return boolean
     * xiaolinlin  2020/1/15 - 10:03
     **/
    public boolean hasNext()
    {
        return index < pageCount;
    }

    /**
     * [簡要描述]:獲取總頁數<br/>
     * [詳細描述]:<br/>
     *
     * @return int
     * xiaolinlin  2020/1/15 - 10:03
     **/
    public int getPageCount()
    {
        return pageCount;
    }

    /**
     * [簡要描述]:獲取每頁數<br/>
     * [詳細描述]:<br/>
     *
     * @return int
     * xiaolinlin  2020/1/15 - 10:03
     **/
    public int getPageSize()
    {
        return pageSize;
    }

    /**
     * [簡要描述]:獲取當前頁數<br/>
     * [詳細描述]:<br/>
     *
     * @return int
     * xiaolinlin  2020/1/15 - 10:03
     **/
    public int getIndex()
    {
        return index + 1;
    }

    /**
     * [簡要描述]:獲取帶分頁的數據總數<br/>
     * [詳細描述]:<br/>
     *
     * @return int
     * xiaolinlin  2020/1/15 - 10:04
     **/
    public int getListSize()
    {
        return listSize;
    }

    public static void main(String[] args)
    {
        List<Integer> list = new ArrayList<>();
        int length = 23;
        for (int i = 0; i < length; i++)
        {
            list.add(i);
        }
        int pageSize = 30;
        System.out.println(list);

        ListPageUtil<Integer> listPageUtil = new ListPageUtil<>(list, pageSize);
        System.out.println("List size: " + listPageUtil.getListSize());
        System.out.println("Page count: " + listPageUtil.getPageCount());
        System.out.println("Page size: " + listPageUtil.getPageSize());
        System.out.println("First page: " + listPageUtil.getFistPage());
        System.out.println("Last page: " + listPageUtil.getLastPage());
        while (listPageUtil.hasNext())
        {
            System.out.println("Page index: " + listPageUtil.getIndex());
            System.out.println("Next page: " + listPageUtil.nextPage());
        }

    }
}

GitHub地址

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章