친구들과 함께하는 부트 프로젝트 중 List<Entity>
를 받아와 List<DTO>
로 반환해야 했다.
Entity
에서 DTO
는 생성자를 사용해 초기화 시켜주었는데 List 타입이라 불가능했다.
List<Entity>
객체를 스트림으로 변환List<DTO>
로 반환 @Override
public List<BoardDto> selectBoardList(int pageNum) {
Page<Board> boardList = boardRepository.findByisDeleteOrderByNoDesc(false,PageRequest.of(pageNum,2));
return boardList.stream().map(BoardDto::new).collect(Collectors.toList());
}
컬렉션 객체에서 stream()을 사용하면 stream 객체로 만들 수 있다.
인자로 함수를 받으며 Stream의 요소를 다른 형태로 변경한다.
내 코드에서는 map()에 Board를 인자로 가지는 BoardDto 생성자를 넣어서 BoardDto로 형변환했다.
Stream을 다시 컬렉션의 형태로 바꿀 수 있게 하는 메소드로 Set 혹은 List형태로 다시 변형시킨다.
Collectors.toList()
Collectors.toSet()
더 정밀하게 바꾸고 싶다면 toCollection을 사용한다.
boardList.stream().collect(Collectors.toCollection(LinkedList::new));
빌더 패턴을 사용한 toEntity() 메소드를 만들어서 처리
public Board toEntity(){
return Board.builder()
.no(no)
.writer(writer)
.title(title)
.content(content)
.writeDate(writeDate)
.isDelete(isDelete)
.view(view)
.recommend(recommend)
.imgRoute(imgRoute)
.build();
}