본문 바로가기

Java

[Java] stream을 사용하는 예시들

map()을 활용해서, 객체 리스트 -> (stream -> 다른 stream) -> 다른 객체 리스트 로 변환하기

1. 객체 리스트를 준비한다.

2. 원하는 객체 리스트에 대한 stream 객체를 구한다.

  • List.stream() 사용

3. stream 객체에 대하여, map()을 이용하여, 다른 stream 객체로 변환한다

  • map(comment -> CommentAndImage.builder().build()) 이용

4. 변환한 stream을 다른 객체 리스트로 변환한다

  • .collect(Collectors.toList()) 사용

 

@Transactional
public List<CommentAndImage> getCommentAndImageList(Integer productId, Integer start) {

    List<Comment> commentList = commentDao.selectAll(productId, start);
    return commentList.stream()
            .map(comment -> CommentAndImage.builder()
                    .id(comment.getId())
                    .productId(comment.getProductId())
                    .reservationInfoId(comment.getReservationInfoId())
                    .score(comment.getScore())
                    .userId(comment.getUserId())
                    .comment(comment.getComment())
                    .reservationUserCommentImages(getCommentImageAndFileInfo(comment.getId()))
                    .build())
            .collect(Collectors.toList());

}

 

 

map() 안의 람다식 2줄 이상으로 작성하기

람다식을 한 줄로 작성하면, return을 생략할 수 있다.

 

2줄 이상으로 작성하면, return을 명시적으로 지정해주어야 한다.

따라서, 이번 경우에는 return을 명시적으로 지정해서, map()을 통해 어떤 stream으로 변환할 것인지 명시적으로 지정해야 한다!

 

private List<CommentImageAndFileInfo> getCommentImageAndFileInfo(int commentId) {
    List<CommentImage> commentImageList = commentImageDao.selectAll(commentId);

    return commentImageList.stream()
            // (질문) map 안에 이렇게 쓰기도 하는지..
            .map(commentImage -> {
                // 1. fileinfo 가져오기
                FileInfo fileInfo = fileInfoDao.select(commentImage.getFileId());
                // 2. map으로 새로운 stream 만들기
                return CommentImageAndFileInfo.builder()
                        .id(commentImage.getId())
                        .reservationInfoId(commentImage.getReservationInfoId())
                        .reservationUserCommentId(commentImage.getReservationUserCommentId())
                        .fileId(fileInfo.getFileId())
                        .fileName(fileInfo.getFileName())
                        .saveFileName(fileInfo.getSaveFileName())
                        .contentType(fileInfo.getContentType())
                        .createDate(fileInfo.getCreateDate())
                        .modifyDate(fileInfo.getModifyDate())
                        .build();
            })
            .collect(Collectors.toList());

}