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());
}
'Java' 카테고리의 다른 글
[Java] import static (0) | 2022.09.24 |
---|---|
자바 웹 애플리케이션이란? (스프링, 스프링부트 아님) (0) | 2022.09.16 |
[JAVA] [JSP] JSP 간단 정리 (0) | 2022.09.16 |
HttpServletRequest 객체, HttpServletResponse 객체 (0) | 2022.09.16 |
[java] java 코딩 컨벤션, 적절한 코딩 스타일 (0) | 2022.09.07 |