Stream - 자바8부터 지원하는 데이터 집합을 읽는 객체
컬렉션에 들어있는 데이터 처리를 매우 간결하게 할 수 있다.
루프문을 사용하지 않고도 선언형으로 컬렉션 데이터를 쉽게 처리할 수 있다.
스트림은 중간처리와 최종처리를 파이프라인으로 해결한다.
스트림을 3단계로 분석하자면
1. 생성 : 스트림 인스턴스 생성
2. 가공 : 필터링, 맵핑 등 원하는 결과 만들어내기
3. 결과 : 최종 결과 만들기
아래 코드는 스프링부트 컨트롤러에서 사용하는 예시이다.
ex1)
@GetMapping("/api/articles")
public ResponseEntity<List<ArticleResponse>> findAllArticles() {
List<ArticleResponse> articles = blogService.findAll()
.stream()
.map(ArticleResponse::new)
.toList();
return ResponseEntity.ok()
.body(articles);
}
ex1)에서 보이는 map 같은 함수는 Stream API에서 제공하는 함수이다.
또한
ex2)
List<String> x = Arrays.asList(new String[]{"a", "b", "d", "c"});
List<String> y = x.stream().sorted().collect(Collectors.toList());
System.out.println(x); // [a, b, d, c]
System.out.println(y); // [a, b, c, d]
ex2)처럼 기존 배열을 망치지 않고 따로 정렬하는 것이 가능하다.
그 외에도
빌더를 사용해서 스트림에 원하는 값을 직접 넣는 등 다양한 컨트롤이 가능하다.