일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- 최종 프로젝트
- github
- jpa회원가입
- spring서버
- Unsatisfied dependency
- Spring Spring boot 차이
- Error creating bean with name
- json gson 차이
- 1차캐시
- 스프링부트오류
- uncheck Exception
- 복합키
- ERD 작성
- json
- Filter
- @IdClass
- JPA
- JoinColumn
- jwt메서드
- REST란
- REST API 규칙
- queryDSL
- 인텔리제이
- 스프링 부트 기능
- 빈생성안됨
- JPA주의사항
- git
- 스프링 부트 공식 문서
- Q 클래스
- jpa에러
- Today
- Total
Everyday Dev System
Steam() 활용하기 본문
1. 아래 코드를 간략화 할 수 있는가?
List<Post> postList = postRepository.findAll();
List<PostResponseDto> postResponseDtoList;
postResponseDtoList = postList.stream()
.map(post -> {
PostResponseDto responseDto = new PostResponseDto(post);
return responseDto;
})
.collect(Collectors.toList());
간략화한 결과 :
List<Post> postList = postRepository.findAll();
List<PostResponseDto> postResponseDtoList = postList.stream()
.map(PostResponseDto::new)
.toList());
위 코드에서 PostResponseDto::new는 Post 객체를 인자로 받는 PostResponseDto의 생성자를 참조하는 생성자 레퍼런스입니다. 이렇게 생성자 레퍼런스를 사용하면 불필요한 코드를 줄이고 가독성을 높일 수 있습니다. map() 메서드 안에서 PostResponseDto 객체를 생성하는 코드를 람다 표현식 대신 생성자 레퍼런스를 사용하여 더 간결하게 표현한 것입니다.
2. stream에서 .map() 과 .collect() 이해하기
List<Post> postList = postRepository.findAll();
List<PostResponseDto> postResponseDtoList = postList.stream()
.map(PostResponseDto::new)
.collect(Collectors.toList());
.collect(Collectors.toList())는 Stream의 요소들을 리스트로 수집하는 작업을 수행합니다. Stream API에서는 중간 연산과 최종 연산으로 구분됩니다. map()은 중간 연산에 해당하며, 각 요소를 변환하는 작업을 수행합니다. 그리고 .collect()는 최종 연산에 해당하며, 변환된 요소들을 최종적으로 수집하는 역할을 합니다.
Stream.map() 메서드로 Post 객체들을 PostResponseDto로 변환한 후에 .collect(Collectors.toList())를 사용하여 그 결과를 List로 수집합니다.
즉, 위 코드에서는 다음과 같은 순서로 작업이 이루어집니다:
postRepository.findAll()을 통해 데이터베이스나 다른 소스로부터 List<Post>를 가져옵니다.
Stream API의 .map() 메서드를 사용하여 각 Post 객체를 PostResponseDto로 변환합니다.
변환된 PostResponseDto 객체들을 .collect(Collectors.toList())를 사용하여 최종적으로 List<PostResponseDto>로 수집합니다.
따라서, .collect(Collectors.toList())는 Stream의 최종 연산으로, Stream에서 처리한 결과를 리스트로 변환해주는 역할을 합니다.
3. .collect(Collectors.toList()); 를 .toList()로 써도 똑같은 기능을 수행하는가?
List<Post> postList = postRepository.findAll();
List<PostResponseDto> postResponseDtoList = postList.stream()
.map(PostResponseDto::new)
.toList(); // Java 16 이상에서 사용 가능
네, 맞습니다. .collect(Collectors.toList())는 람다 표현식을 사용하여 Stream의 요소들을 리스트로 수집하는 작업을 수행하고, Java 16부터는 더 간결하게 .toList() 메서드를 사용할 수 있습니다.
Java 16 이상의 버전에서는 Stream 인터페이스에 toList() 메서드가 추가되어 리스트 수집을 더 간단하게 할 수 있습니다. 이를 사용하면 코드가 더 짧고 가독성이 좋아집니다. 기존에 사용하던 .collect(Collectors.toList()) 대신 .toList()를 사용하면 아래와 같이 코드를 작성할 수 있습니다.
따라서 .toList()를 사용하여 똑같은 기능을 수행할 수 있으며, 코드가 더 간결해집니다. .toList()는 Java 16 이상에서만 사용할 수 있으므로 Java 8 또는 Java 11, 14 등의 버전에서는 .collect(Collectors.toList())를 사용해야 합니다.
'내배캠 주요 학습 > TIL : Today I Learned' 카테고리의 다른 글
@ExceptionHandler 사용법 (0) | 2023.07.25 |
---|---|
7월 25일 TIL (0) | 2023.07.25 |
후발대 강의 (0) | 2023.07.17 |
Spring Security (0) | 2023.07.07 |
협업을 할 때에 궁금한 사항들 및 유의사항 (0) | 2023.07.04 |