Sequence
11 May 2019코틀린 시퀀스는 자바 스트림과 개념이 같다. 코틀린에서 시퀀스를 제공하는 이유는 자바 8 이전 버전을 사용하는 경우 스트림이 없기 때문이다. 코틀린 시퀀스는 여러 CPU에서 병렬로 실행하는 기능을 제공하지 않기 때문에 자바 버전이 8 이상인 경우 스트림을 사용하면 된다.
Sequence
- 컬렉션 함수(ex: map, filter)는 결과 컬렉션을 즉시 생성한다
- 컬렉션 함수를 연쇄하면 매 단계마다 계산 중간 결과를 새로운 컬렉션에 임시로 담는다
- sequence를 사용하면 중간 임시 컬렉션을 사용하지 않고도 컬렉션 연산을 연쇄할 수 있다
중간 연산과 최종 연산
people.asSequence()
.map(Person::name) // 중간 연산
.filter { it.startsWith("A") } // 중간 연산
.toList() // 최종 연산
- 중간 연산
- 다른 시퀀스를 반환
- 계산이 지연된다
- 최종 연산
- 결과를 반환
- 최종 연산이 호출되면 연기됐던 모든 계산이 수행된다
연산 수행 순서
- 즉시 계산은 전체 컬렉션에 연산을 적용하지만 지연 계산은 원소를 한번에 하나씩 처리한다
숫자를 제곱하고 제곱한 숫자중에서 3보다 큰 첫번째 원소를 찾는 예
listOf(1,2,3,4).map { it * it }.find { it > 3 }
listOf(1,2,3,4).asSequence().map { it * it }.find { it > 3 }
자바 스트림과 코틀린 시퀀스
- 동일하나 자바 스트림만의 기능이 있음
- 자바 스트림은 스트림 연산을 여러 CPU에서 병렬적으로 실행 가능