스트림을 주의해서 사용하자
스트림은 유한/ 무한 시퀀스를 의미하거나, 스트림 파이프라인은 이 원소들로 수행하는 연산 단계를 표현하는 개념이다. 스트림 파이프라인은 소스 스트림에서 시작해서 종단 연산으로 끝나며 그 사이에 하나 이상의 중간 연산이 있을 수 있다. 각 중간 연산은 스트림을 어떠한 방식으로 변환한다.
스트림 API는 메소드 연쇄를 지원하는 Fluent API다. 즉, 파이프 라인 하나를 구성하는 모든 호출을 연결해서 단 하나의 표현식으로 완성할 수 있다. 스트림 API는 람다가 필수다. 람다의 부작용처럼 오히려 가독성이 떨어지기 시작한다. for로 되어 있는 기존 코드를 스트림을 사용하도록 리팩토링하는 건 좋다. 그러나 스트림으로 작성하는게 나아 보일 때만 반영하자. 또한 함수 객체로는 할 수 없지만 블록으로 할 수 있는 일들이 있다.
- 코드 블록에서는 지역변수를 읽고 수정할 수 있다. 그러나 람다는 final로 지역변수를 취급하기에 수정할 수 없다.
- 코드 블록에서는
return으로 흐름 제어할 수 있지만 람다, 스트림 중에는 불가능하다.
그러나
- 시퀀스를 일관되게 변환
- 시퀀스를 필터링
- 시퀀스를 하나의 연산을 사용해서 결합한다.
- 시퀀스를 컬렉션에 모은다.
- 시퀀스에서 특정 조건을 만족하는 원소를 찾는다.
라고 하면 스트림으로 리팩토링을 할 만하다.