귀찮지만 만들어보자

이펙티브 자바 - 람다와 스트림(6) 본문

이펙티브 자바

이펙티브 자바 - 람다와 스트림(6)

타우렌주술사 2019. 1. 19. 14:52


반환 타입으로는 스트림보다 컬렉션이 낫다


스트림에서는 일반적인 컬렉션에서 지원하는 iteration(반복)을 제공하지 않는다.
사용하지 말라는 가장 큰 이유가 이것이다.
스트림 인터페이스는 iterable 인터페이스가 정의한 추상 메서드를 포함할 뿐만아니라,
iterable 인터페이스가 정의한 방식대로 동작한다.
그럼에도 불구하고 foreach로 스트림을 반복할 수 없는 이유는 스트림이 iterable을 상속받지 않아서다.
그러니까 어설프게 스트림을 반환하는 것 보다는 컬렉션이 낫다
스트림을 반복처리하도록 만드는 방법이 아예 없진 않지만 어지간하면 지양하자...

원소의 개수가 많다면(ex. 2^30-1) 처리할 수 있는 전용 컬렉션을 구현하거나,
그것이 불가능 할 경우에 stream과 iterable 중 더 자연스러운 것을 반환하자.