반응형
Java에서 List 페이지 처리는 대량의 데이터를 페이지별로 나누어 표시하거나 처리할 때 유용한 방법 중 하나입니다. 이를 통해 사용자는 페이지를 탐색하고 데이터를 효과적으로 관리할 수 있습니다. 페이지 처리는 웹 애플리케이션, 데이터베이스 쿼리 결과 또는 기타 데이터 목록을 다루는 다양한 상황에서 사용됩니다.
/**
* returns a view (not a new list) of the sourceList for the
* range based on page and pageSize
* @param sourceList
* @param page, page number should start from 1
* @param pageSize
* @return
* custom error can be given instead of returning emptyList
*/
public static <T> List<T> getPage(List<T> sourceList, int page, int pageSize) {
if(pageSize <= 0 || page <= 0) {
throw new IllegalArgumentException("invalid page size: " + pageSize);
}
int fromIndex = (page - 1) * pageSize;
if(sourceList == null || sourceList.size() <= fromIndex){
return Collections.emptyList();
}
// toIndex exclusive
return sourceList.subList(fromIndex, Math.min(fromIndex + pageSize, sourceList.size()));
}
혹여 Collection으로 사용하는 경우를 대비하여 추가해봤습니다.
public static <T> Collection<T> getPage(Collection<T> sourceList, int pageNum, int pageSize) {
if (sourceList == null) {
return Collections.emptyList();
}
List<T> list = new ArrayList<T>(sourceList);
if (pageSize <= 0 || pageSize > list.size())
pageSize = list.size();
return list.subList(pageNum * pageSize, Math.min(++pageNum * pageSize, list.size()));
}
전체 페이지를 알고자 getPageTotal도 추가해봤습니다.
public static <T> int getPageTotal(List<T> sourceList, int pageSize) {
if(pageSize <= 0) {
throw new IllegalArgumentException("invalid page size: " + pageSize);
}
// toIndex exclusive
int numPages = (int) Math.ceil((double)sourceList.size() / (double)pageSize);
return numPages;
}
보편적인 처리 절차에 대해 설명드리자면
- 데이터 소스 가져오기: 먼저 데이터베이스, 웹 서비스, 파일 또는 다른 소스로부터 데이터를 검색합니다. 이 데이터는 Java의 List 또는 다른 데이터 구조에 저장됩니다.
- 페이지당 항목 수와 현재 페이지 번호 정의: 사용자에게 표시할 페이지당 항목 수를 정의하고, 현재 페이지 번호를 추적합니다. 이를 위해 요청 매개변수나 세션을 사용할 수 있습니다.
- 전체 항목 수 계산: 데이터베이스 또는 데이터 소스로부터 전체 항목 수를 검색하여 전체 페이지 수를 계산합니다. 일반적으로 이 정보는 페이지 링크를 생성하거나 페이지 내비게이션을 구현할 때 사용됩니다.
- 해당 페이지의 데이터 추출: 현재 페이지 번호와 페이지당 항목 수를 사용하여 해당 페이지의 데이터를 추출합니다. 일반적으로 서브리스트 또는 데이터베이스 쿼리의 LIMIT 및 OFFSET 절을 사용합니다.
- 페이지 데이터를 사용자에게 표시: 페이지에 대한 데이터를 사용자에게 표시하고, 페이지 번호와 이전/다음 페이지로 이동할 수 있는 링크 또는 버튼을 표시합니다.
- 페이지 내비게이션 구현: 페이지 내비게이션을 구현하여 사용자가 페이지를 이동할 수 있도록 합니다. 이전 페이지, 다음 페이지, 특정 페이지로 이동하는 링크 또는 버튼을 제공합니다.
- 검색 및 정렬 옵션 추가 (선택 사항): 페이지 처리에 검색, 정렬 및 필터링 옵션을 추가하여 사용자가 데이터를 더욱 효과적으로 관리할 수 있도록 합니다.
반응형
'Framework > Spring Boot' 카테고리의 다른 글
[Spring boot] JAVA List 페이지처리. (0) | 2023.10.04 |
---|---|
[Spring boot] JAVA Collection List 페이징처리. (0) | 2023.10.04 |
[Spring Boot] Email 주소 검증. (0) | 2023.09.29 |