[Spring] random List를 Page로 바꾸는 방법(JPA Pageable)

2023. 8. 3. 02:58

문제 상황

Spring Boot로 개발을 진행하던 중 random한 list를, 그것도 filter를 적용한 list를 page로 직접 변환해야 하는 일이 생겼다.

JPA는 pageable을 사용하여 손쉽게 pagination을 적용할 수 있게 해주지만 내 경우에는 list를 page 객체로 직접 변환해야 했기 때문에 구글링을 좀 했어야 했다.

해결 방법

결론적으로 그 방법은

List를 하나 정의 한 후,

List<ImageListResDto> fileList = new ArrayList<>();

fileList를 생성 후 반복문을 돌면서 list에 원소를 추가한다.

fileRepository.findAll().forEach(file-> {
            if (file.getItem() != null) {
                if (Boolean.FALSE.equals(file.getItem().getIsDeleted())) {
                    fileList.add(new ImageListResDto(file.getUrl(), file.getItem().getItemId(), null));
                }
            } else {
                Optional<Portfolio> portfolio = portfolioRepository.findByFile(file);
                if (portfolio.isPresent() && Boolean.FALSE.equals(portfolio.get().getIsDeleted())) {
                    fileList.add(new ImageListResDto(file.getUrl(), null, portfolio.get().getPortfolioId()));
                }
            }
        });

Collections.shuffle을 사용해 이미지를 랜덤하게 섞는다.

//이미지 랜덤하게 섞기
        Collections.shuffle(fileList);

page 객체를 이렇게 직접 생성하여 내가 생성한 리스트에 pagination을 적용한다.

//list를 page로 변환
        int start = (int) pageable.getOffset();
        int end = Math.min((start + pageable.getPageSize()), fileList.size());

        return new PageImpl<>(fileList.subList(start, end), pageable, fileList.size());

BELATED ARTICLES

more