分页,是项目开发中的常驻者,想必大家都使用过PageHelper进行分页,或者利用mysql语句的limit进行分页。
利用PageHelper去分页,无非就是在你的sql语句外层嵌套一个limit,一旦遇到复杂的接口,就会导致分页失效,这时,只能手动去分页,也就是在你的mapper.xml当中添加limit语句。
那么,大家是否想过利用java8中的Stream流去进行数据分页呢?这无疑也是一个办法,stream中有个skip方法,即跳过指定数据。咱们就利用这一方法去完成分页操作。
代码如下:
List<AssetsDirectoriesVo> list = service.queryPageList(bo); //获取的数据集合
PageInfo<AssetsDirectoriesVo> pageInfo = new PageInfo<>(); //创建一个分页对象
pageInfo.setTotal(list.size());
pageInfo.setPages(list.size()/pageBaseReq.getPageSize()+(list.size()%pageBaseReq.getPageSize()==0?0:1)); //pageBaseReq为分页参数对象
pageInfo.setPageNum(pageBaseReq.getPageNum());
pageInfo.setPageSize(pageBaseReq.getPageSize());
List<AssetsDirectoriesVo> res = list.stream()
.skip((pageBaseReq.getPageNum() - 1) *pageBaseReq.getPageSize()).limit(pageBaseReq.getPageSize()).collect(Collectors.toList()); //开始分页
pageInfo.setList(res);
分页操作
list.stream().skip((pageBaseReq.getPageNum() - 1) *pageBaseReq.getPageSize()).limit(pageBaseReq.getPageSize()).collect(Collectors.toList())
至此,利用stream流分页操作就完成了!
这种方法当然还是不建议使用,因为每次查询实际上都是将所有数据都查询出来了,若数据量大的话,那么查询时间将会大大增加,所以建议还是使用limit去进行分页查询。
标签:pageBaseReq,分页,Stream,getPageSize,list,pageInfo,limit,JAVA8 From: https://www.cnblogs.com/charon-m/p/17109648.html