您好,登錄后才能下訂單哦!
這篇文章主要為大家詳細介紹了如何在spring-boot中將List轉換為Page,文中示例代碼介紹的非常詳細,具有一定的參考價值,發現的小伙伴們可以參考一下:
需求:班級與教師是多對多
關系,在后臺班級管理需要添加一個接口,傳入教師的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()); }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。