책을 읽기전에
나는 자바8 스트림 API 사용법만 찾아보고 제대로 된 이해를 하지 않았다. 그래서 책을 읽게 되었고 자세히 알아보려 한다.
자바에서 많이 사용되는 것 중 하나가 컬렉션이다.
- SQL WHERE 절과 같은 역할을 자바에서 한다면?
- 커다란 컬렉션을 자바에서 어떻게 효율적으로 처리할까?
1. 스트림이란 무엇인가?
스트림을 이용하면 선언형으로 컬렉션 데이터를 처리할 수 있다.
List<String> lowCaloricDishesName =
menu.stream()
.filter(d -> d.getCalories() < 400)
.sorted(comparing(Dishes::getCalories))
.map(Dish::getName)
.collect(toList());
- 선언형으로 코드 구현 -> 변하는 요구사항에 쉽게 대응할 수 있음
- 데이터 처리 파이프라인을 만들 수 있다. -> 가독성, 명확성
2. 스트림 시작하기
스트림에는 두가지 특징이 있다.
- 파이프라이닝 : 커다란 파이프라인을 구성할 수 있다 -> laziness, short-circuiting 같은 최적화도 얻을 수 있음 ( 5장에서 설명 )
데이터베이스 질의와 비슷 - 내부반복
스트림 연산의 종류
- filter
- map
- limit
- collect
다음 포스팅에서 자세한 API 사용방법을 살펴보고 지금은 컬렉션 API와 스트림 API의 개념적인 차이를 알아보자.
3. 스트림 vs 컬렉션
내부반복 vs 외부반복
4. 스트림 연산
List<String> names = menu.stream() // 메뉴에서 스트림을 얻는다.
.filter(d -> d.getCalories() > 300) // 중간연산
.map(Dish::getName) // 중간연산
.limit(3) // 중간연산
.collect(toList()); // 스트림을 리스트로 변환