데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메소드를 정의해놓은 것이다.
추상화하였기에 코드의 재사용성이 높아진다. 또한 데이터를 모두 같은 방식으로 다룰 수 있다.
중간 연산은 map()과 최종 연산은 reduce()와 collect()가 핵심이라고 한다.
스트림의 요소에 저장된 값 중에서 원하는 필드만 뽑아내거나 특정 형태로 변환한다.
다음 코드는 문자열 스트림을 각 문자열의 길이로 이루어진 스트림을 반환한다.
Stream<String> stream = Stream.of("abc", "ab", "abcd", "abcde");
stream.map(s -> s.length())
.forEach(System.out::println);
//출력결과
3
2
4
5
collect() 메소드는 Collectors 객체에 구현된 방법대로 스트림의 요소를 수집한다. 다양한 방법이 클래스 메소드로 정의되어 있다. toList만 확인하자.
최종 연산에 .collect로, Collector.toList()처럼 메소드를 사용하면 된다.
List<WorryBoard> worries = worryBoardRepository.findByState(false);
List<WorryResponse> worriesRes = worries
.stream()
.map(WorryResponse::new)
.collect(Collectors.toList());