暂无图片
暂无图片
2
暂无图片
暂无图片
暂无图片

Java8 Stream流导致PageHelper失效问题及解决

一叶扁舟 2022-04-19
2615

一、问题描述

PageHelper.startPage(1, 10); List<Data> datas = dataService.finddataList(); // 使用stream处理数据 dataList = datas.stream().xxxxx; return new PageInfo<>(dataList);

如上,如果使用Stream处理datas,那经过分页返回的数据中total最大值就是10,无法分页,导致分页失效。

二、问题原因剖析

我们看到pageHelper使用的时候

// 第一步:分页查询 PageHelper.startPage(1, 10); List<Data> datas = dataService.finddataList(); // 第二步:返回PageInfo对象 return new PageInfo<>(dataList);

【第一步】:分页查询
分页查询的时候,得到的datas是一个特殊的ArrayList,Page对象,在源码中可以看到

public class Page<E> extends ArrayList<E> implements Closeable { }

【第二步】:返回PageInfo对象
在返回PageInfo对象的时候,源码中会做如下判断
image.png

【结论】由于使用stream之后收集为了普通的ArrayList对象,并不是Page对象,所以在第二步返回时被判定为非page对象,被当做一个普通的ArrayList设置了pageNum(写死为第一页了)、total等,所以分页就失效了
stream把可正常分页的Page对象(ArrayList的子对象),转换成了不能分页的ArrayList对象

三、解决方案

把stream流处理,换成增强for循环即可

for (Data data : datas) { xxx }
最后修改时间:2022-04-19 11:10:57
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

暂无图片
获得了788次点赞
暂无图片
内容获得334次评论
暂无图片
获得了144次收藏
目录
  • 一、问题描述
  • 二、问题原因剖析
  • 三、解决方案