Java的Stream流的分页,Stream的skip和limit实现分页

发布时间 2023-05-22 15:56:32作者: C_C_菜园

1、工具类

package com.cc.testproject.utils;

import com.github.pagehelper.PageInfo;
import org.springframework.stereotype.Component;

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

/** List分页工具类
 * @author CC
 * @since 2022/2/16
 **/
@Component
public class StreamUtils<T> {

    /** stream分页公用方法(返回传入的List)
     * @param t T
     * @param page 当前页
     * @param pageTotal 每页总条数
     * @return List<T>
     **/
    public List<T> pageSkipLimit(List<T> t, Integer page, Integer pageTotal) {
        return t.stream()
                .skip((long) (page - 1) * pageTotal)
                .limit(pageTotal)
                .collect(Collectors.toList());
    }

    /** 获取分页后的pageInfo。(设置了vos,总条数)
     * @param finalVos   需要分页的vos
     * @param page       当前页
     * @param pageTotal  每页条数
     * @return com.github.pagehelper.PageInfo<T>
     * @since 2023/5/22 0022
     * @author CC
     **/
    public PageInfo<T> getPageInfo(List<T> finalVos, Integer page, Integer pageTotal) {
        PageInfo<T> of = new PageInfo<>();
        of.setTotal(finalVos.size());
        //手动分页:finalVos
        List<T> pageVos = this.pageSkipLimit(finalVos, page, pageTotal);
        of.setList(pageVos);
        return of;
    }


}

2、使用

    @Resource
    private StreamUtils<User> streamUtils;

    @Test
    public void test0001()throws Exception{
        User user1 = new User();
        user1.setName("第一个");
        User user2 = new User();
        user2.setName("第二个");
        User user3 = new User();
        user3.setName("第三个");

        List<User> vos = Arrays.asList(user1,user2,user3);

        List<User> users = streamUtils.pageSkipLimit(vos, 2, 1);
        System.out.println("分页后的数据:" + users);
    }
  • 如:
  • 第一页,每页一个

image

  • 第二页,每页一个

image