1. 程式人生 > >利用java8 stream api 實現List集合分頁獲取工具

利用java8 stream api 實現List集合分頁獲取工具

package com.test.paging;

import java.util.Arrays;
import java.util.List;

/**
 * @author kevin.chen
 *         Date 2017/11/9
 *         Time 18:05
 */
public class ListPagingTest {


    public static void main(String[] args) {
        List<String> list = Arrays.asList("ab", "ce", "re", "asf", "saf", "abc", "111");

        PagingList<String> paging = new PagingList<>(list, 2);


        while (paging.hasNext()) {
            paging.next().forEach(System.out::println);
        }


    }


}

自己利用java8 stream api 實現的List集合分頁獲取工具 分享給大家
package com.bestpay.account.core.common;

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

/**
 * @author kevin.chen
 *         Date 2017/11/9
 *         Time 18:11
 *         對資料集合進分頁獲取
 */
public class PagingList<T> {

    /**
     * 總頁數
     */
    private int totalPage = 0;

    /**
     * 當前是第幾頁
     */
    private int curPageNo = 0;

    /**
     * 每頁的大小
     */
    private int pageSize = 0;

    /**
     * 每頁預設大小
     */
    private static final int DEFAULT_PAGE_SIZE = 500;


    private List<T> pageData = null;

    public PagingList(List<T> pageResult, int pageSize) {
        this.pageSize = pageSize;
        this.pageData = pageResult;
        init(pageResult, pageSize);
    }


    public PagingList(List<T> pageResult) {
        this(pageResult, DEFAULT_PAGE_SIZE);
    }


    private void init(List<T> pageResult, int pageSize) {
        if (pageSize <= 0) {
            throw new IllegalArgumentException("Paging size must be greater than zero.");
        }
        if (null == pageResult) {
            throw new NullPointerException("Paging resource list must be not null.");
        }
        if (pageResult.size() % pageSize > 0) {
            this.totalPage = (pageResult.size() / pageSize) + 1;
        } else {
            this.totalPage = pageResult.size() / pageSize;
        }
    }

    /**
     * 返回當前剩餘頁數
     *
     * @return
     */
    private int getSurplusPage() {
        if (pageData.size() % pageSize > 0) {
            return (pageData.size() / pageSize) + 1;
        } else {
            return pageData.size() / pageSize;
        }

    }

    /**
     * 返回是否還有下一頁資料
     *
     * @return
     */
    public boolean hasNext() {
        return pageData.size() > 0;
    }

    /**
     * 獲取分頁後,總的頁數
     *
     * @return
     */
    public int getTotalPage() {
        return totalPage;
    }

    public List<T> next() {
        List<T> pagingData = pageData.stream().limit(pageSize).collect(Collectors.toList());
        pageData = pageData.stream().skip(pageSize).collect(Collectors.toList());
        return pagingData;
    }

    /**
     * 返回當前頁數
     *
     * @return
     */
    public int getCurPageNo() {
        return totalPage - getSurplusPage();
    }
}