ページネーション作成メソッド
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
private List<Integer> initPagination(int paginationSize) { | |
if (getTotalPages() < paginationSize) { | |
return IntStream.range(0, paginationSize) | |
.boxed() | |
.collect(Collectors.toList()); | |
} | |
// ページネーションサイズが偶数かどうか | |
boolean isEvenSize = paginationSize % 2 == 0; | |
int currentPageNumber = this.page.getNumber(); | |
// 現在のページの左側にあるべきページ数 | |
int leftSidePageQty = isEvenSize ? (paginationSize / 2) - 1 : paginationSize / 2; | |
// 現在のページの右側にあるべきページ数 | |
int rightSidePageQty = paginationSize / 2; | |
// ページネーションの最初のページ | |
int firstPageNumber = currentPageNumber - leftSidePageQty; | |
// ページネーションの最後のページ | |
int lastPageNumber = firstPageNumber + (paginationSize - 1); | |
List<Integer> pageNumbers = IntStream.rangeClosed(firstPageNumber, lastPageNumber) | |
.boxed() | |
.collect(Collectors.toList()); | |
// 現在のページの左側にある有効なページ数 | |
int leftPageQty = getLeftPageQty(pageNumbers, currentPageNumber); | |
// 現在のページの右側にある有効なページ数 | |
int rightPageQty = getRightPageQty(pageNumbers, currentPageNumber); | |
// 左側の有効なページ数が足りない場合、右側の有効なページ数が足りない場合 | |
if (leftPageQty < leftSidePageQty) { | |
int generatePageQty = leftSidePageQty - leftPageQty; | |
pageNumbers = IntStream.rangeClosed(firstPageNumber + generatePageQty, lastPageNumber + generatePageQty) | |
.boxed() | |
.collect(Collectors.toList()); | |
} else if (rightPageQty < rightSidePageQty) { | |
int generatePageQty = rightSidePageQty - rightPageQty; | |
pageNumbers = IntStream.rangeClosed(firstPageNumber - generatePageQty, lastPageNumber - generatePageQty) | |
.boxed() | |
.collect(Collectors.toList()); | |
} | |
return pageNumbers; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment