Skip to content

Instantly share code, notes, and snippets.

@b1a9id
Last active January 16, 2018 10:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save b1a9id/98f5d7632868f47849f367eea80dc80e to your computer and use it in GitHub Desktop.
Save b1a9id/98f5d7632868f47849f367eea80dc80e to your computer and use it in GitHub Desktop.
ページネーション作成メソッド
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