java stream分页

java stream 利用 skip+limit 分页

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

/**
 * @Author :  xiaowenhui
 * @Date : 2019/9/9 0009
 * @Time : 17:01
 * @Email : 610729719@qq.com
 * @Version : 1.0
 * @Description : java stream分页  利用 skip+limit
 */
public class PageStream<T> {

    private int current_page;//第几页
    private int size;//页数大小
    private int total_page;//总页数
    private int total_sum; //总条数
    private transient List<T> instanceList;//Gson不序列化transient字段
    private List<T> currentPageData;//分页后的数据
    private transient Optional<List<T>> op;

    /**
     * @param instanceList  需要分页的数据
     * @param size 每页显示的条数
     */
    public PageStream(List<T> instanceList, int size) {
        this.size = size;
        setInstanceList(instanceList);
    }
    public int getCurrent_page() {
        return current_page;
    }
    public void setCurrent_page(int current_page) {
        this.current_page = current_page<1?1:current_page>this.total_page?this.total_page:current_page;
        setCurrentPageData(currentPageData());
    }
    public int getSize() {
        return size;
    }
    public void setSize(int size) {
        this.size = size;
    }
    public int getTotal_page() {
        return total_page;
    }
    public int getTotal_sum() {
        return total_sum;
    }
    public List<T> getInstanceList() {
        return instanceList;
    }
    public void setInstanceList(List<T> instanceList) {
        this.op= Optional.ofNullable(instanceList);
        this.instanceList = op.orElse(new ArrayList<T>());
        this.total_sum = this.instanceList.size();
        this.total_page =(int) Math.ceil(1.0*this.total_sum/this.size);
    }
    public void setCurrentPageData(List<T> currentPageData) {
        this.currentPageData = currentPageData;
    }
    public List<T> getCurrentPageData(){
        return this.currentPageData;
    }
    private List<T> currentPageData(){
        if(this.size==0 || this.total_page == 1){
            return this.instanceList;
        }
        List<T> currentPageData = new ArrayList<T>();
        instanceList.stream().skip((this.current_page-1)*this.size).limit(this.size).forEach(e->currentPageData.add(e));
        return currentPageData;
    }
}

调用方式:

 List<OrderInfoVo> orderInfoVos=new ArrayList<>();
 PageStream<OrderInfoVo> orderInfoVoPageStream = new PageStream<>(orderInfoVos,         orderParam.getPageSize()); //页数大小
 orderInfoVoPageStream.setCurrent_page(orderParam.getPageNum()); //第几页
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Twist丶Fate

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值