코틀린에서는 여러 컬렉션 관련 함수를 제공한다.
.map(), .filter()와 같은 기본적으로 제공하는 api에 대해서는 간단히 설명하면 해당 API들은 리턴 값으로 컬렉션을 즉시 생성한다.
따라서 원소에 갯수가 많을 경우 메모리를 많이 차지 할 수 있다.
시퀀스를 이용한 방법
val result = people.asSequence()
.map(Person::name)
.filter { it.startsWith("k") }
.toList()
위와 같이 .asSequence()를 이용할 경우 원소의 갯수가 많을 수록 성능개선이 가능하다!!!
시퀀스와 컬렉션을 그대로 쓰는 방법의 선택 차이는 최종연산에 따라 골라쓰도록하자
그 이유는 이와 같다. 최종연산이 find()일 경우는 모든 컬랙션에 대해서 접근할 필요없이 원소에 순서대로 첫번째 값만 있으면 되기때문에 순차적으로 적용하는 시퀀스로 변환해서 사용하고 toList() 와 같이 모든 컬렉션이 반영되어야 하는 경우에는 시퀀스로 변환하지 말고 그냥 사용하도록 하자!
시퀀스? 스트림? 컬렉션?
그래서 세개중에 어떤 대상을 사용해야할 지 선택기준은?
컬렉션 VS 시퀀스 / 스트림 으로 구분할 수 있다. 그럼 시퀀스와 스트림을 구분하는 이유는 자바 8버전이하에서 스트림을 지원하지 않기에 시퀀스를 지원한다. 따라서 자바 버전에 따라 달리 사용하고 시퀀스와 스트림 제공하는 기능의 차이는 병렬스트림의 지원여부 차이이다.