一、问题描述
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对象的时候,源码中会做如下判断
【结论】由于使用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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。