PageInfo 对象经过stream处理会导致分页属性异常
错误代码:

debug进行分析:
1、注意这里,在没进行stream流处理时,数据list是一个正常的可分页Page类型的集合List

2、在经过了stream流处理后返回的List已经改表了,不具有分页的属性了,就是一个普通的ArrayList;现在就大概可以找到pageInfo对象分页属性失效的原因了,下面去源码里找找原因
3、源码分析
public PageInfo(List<T> list, int navigatePages) {
super(list);
this.isFirstPage = false;
this.isLastPage = false;
this.hasPreviousPage = false;
this.hasNextPage = false;
if (list instanceof Page) { //1、 会判断是否为Page对象类型 若是则正常返回分页属性
Page page = (Page)list;
this.pageNum = page.getPageNum();
this.pageSize = page.getPageSize();
this.pages = page.getPages();
this.size = page.size();
if (this.size == 0) {
this.startRow = 0L;
this.endRow = 0L;
} else {
this.startRow = page.getStartRow() + 1L;
this.endRow = this.startRow - 1L + (long)this.size;
}
} else if (list instanceof Collection) {
//2、非Page对象,则pageNum固定为1,以及pageSize为集合大小
this.pageNum = 1;
this.pageSize = list.size();
this.pages = this.pageSize > 0 ? 1 : 0;
this.size = list.size();
this.startRow = 0L;
this.endRow = list.size() > 0 ? (long)(list.size() - 1) : 0L;
}
if (list instanceof Collection) {
this.calcByNavigatePages(navigatePages);
}
}
4、通过源码就可以发现如果数据data集合为非Page类型,则其分页属性会被写死,进而导致分页属性失效
解决方式
将stream流处理,换成增强for循环即可
博客讨论了在Java中使用PageInfo对象进行分页时,经过stream处理导致分页属性异常的问题。分析了源码,指出当数据集合不是Page类型时,分页属性会被硬编码。解决方案是避免使用stream,改用增强for循环以保持分页信息的正确性。
5660

被折叠的 条评论
为什么被折叠?



