spring-boot List转Page的方法步骤

所属分类: 软件编程 / java 阅读数: 30
收藏 0 赞 0 分享

需求:班级与教师是多对多关系,在后台班级管理需要添加一个接口,传入教师的id和pageable,返回带分页数据的班级信息。

Page<Klass> pageByTeacher(Long teacherId, Pageable pageable);

一开始打算是在KlassRepository(继承自PagingAndSortingRepository)中添加一个类似findByElementId的接口,然后直接返回带分页的数据。但是试了几次并不成功,无论是把teacher还是将带teacher的List传入方法中都失败。

换了一种思路,直接调TeacherRepository的FindById()方法找到teacher,然后返回teacher的成员klassList就行了。

  Teacher teacher = teacherRepository.findById(teacherId).get();
  List<Klass> klassList = teacher.getKlassList();

但是光返回klassList还不行,需要将它包装成Page才行,去官网上查到了一种使用List构造Page的方法

PageImpl
public PageImpl(List<T> content,
Pageable pageable,
long total)
Constructor of PageImpl.
Parameters:
content - the content of this page, must not be null.
pageable - the paging information, must not be null.
total - the total amount of items available. The total might be adapted considering the length of the content given, if it is going to be the content of the last page. This is in place to mitigate inconsistencies.

参数:

  • content: 要传的List,不为空
  • pageable: 分页信息,不为空
  • total: 可用项的总数。如果是最后一页,考虑到给定内容的长度,total可以被调整。这是为了缓解不一致性。(这句没懂什么意思),可选

一开始还以为它会自己按照传入的参数分割List

Page<Klass> klassPage = new PageImpl<Klass>(klassList, pageable, klassList.size());

结果debug发现不行,得手动分割,就去网上参考了别人的写法

 // 当前页第一条数据在List中的位置
  int start = (int)pageable.getOffset();
  // 当前页最后一条数据在List中的位置  
  int end = (start + pageable.getPageSize()) > klassList.size() ? klassList.size() : ( start + pageable.getPageSize());
  // 配置分页数据
  Page<Klass> klassPage = new PageImpl<Klass>(klassList.subList(start, end), pageable, klassList.size());

debug查看结果


最后为了增加复用性,改成范型方法:

  public <T> Page<T> listConvertToPage(List<T> list, Pageable pageable) {
  int start = (int)pageable.getOffset();
  int end = (start + pageable.getPageSize()) > list.size() ? list.size() : ( start + pageable.getPageSize());
  return new PageImpl<T>(list.subList(start, end), pageable, list.size());
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

更多精彩内容其他人还在看

Java Set简介_动力节点Java学院整理

Set最大的特性就是不允许在其中存放的元素是重复的。接下来通过本文给大家分享java set常用方法和原理分析,需要的的朋友参考下吧
收藏 0 赞 0 分享

Java Timezone类常见问题_动力节点Java学院整理

这篇文章主要介绍了Java Timezone类常见问题的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

javaWeb项目部署到阿里云服务器步骤详解

本篇文章主要介绍了javaWeb项目部署到阿里云服务器步骤详解,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解使用zxing库生成QR-Code二维码

这篇文章主要介绍了详解使用zxing库生成QR-Code二维码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

java实现对服务器的自动巡检邮件通知

这篇文章主要为大家详细介绍了java实现对服务器的自动巡检邮件通知,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

java随机验证码生成实现实例代码

这篇文章主要介绍了java随机验证码生成实现实例代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

java读取txt文件代码片段

这篇文章主要为大家详细介绍了java读取txt文件的代码片段,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

java连接mysql数据库的方法

这篇文章主要为大家详细介绍了java连接mysql数据库的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

java 算法之快速排序实现代码

这篇文章主要介绍了java 算法之快速排序实现代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Spring缓存注解@Cacheable,@CachePut , @CacheEvict使用

这篇文章主要介绍了详解Spring缓存注解@Cacheable,@CachePut , @CacheEvict使用,非常具有实用价值,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多