[코틀린쿡북] 6.시퀀스

나고수·2021년 10월 19일
0

kotlin

목록 보기
9/10

컬렉션에서 처리는 즉시 발생한다.
반면에 시퀀스는 지연 처리된다.
데이터를 처리하기 위해 시퀀스를 사용하면 각각의 원소는 다음 원소가 처리되기 전에 전체 파이프라인을 완료한다.
지여녀 처리 방식은 데이터가 많거나 first 같은 쇼트서킷(특정 조건에 다를때 까지 오직 필요한 데이터만을 처리하는 방식) 연산의 경우 도움이 되고 원하는 값을 찾았을 때 시퀀스를 종료할 수 있게 도와준다.

6.1 지연 시퀀스 사용하기

특정 조건을 만족시키는 데 필요한 최소량의 데이터만 처리하고 싶다.

//100~200 까지의 숫자를 각각 2배로 만든다음 3으로 나눠 딱 떨어지는 첫번째 값을 찾고싶다
(100 until 200).map{it*2} //100개 계산
		.filter{it%3==0} //100개 계산
        	.first()
(100 until 200).map{it*2} //100개 계산
		.first{it%3==0} // 3개 계산
//best way
//100을 가지고 한 서킷을 다 돈다
//101을 가지고 한 서킷을 다 돈다
//102을 가지고 한 서킷을 다 돈다
//끝 (오직 6개의 연산만 수행 후 종료됨)
(100 until 200).asSequence()
		.map{it*2}
        	.filter{it%3==0}
            	.first()

//시퀀스가 비어있을 수도 있다면 firstOrNull을 사용

6.2 시퀀스 생성하기

sequenceOf, asSequence

val numSequence1 = sequenceOf(3,1,4,1,5,9)
val numSequence2 = listOf(3,1,4,1,5,9).asSequence()

6.3 시퀀스에서 yield하기

//sequence를 사용해 피보나치 수 생성하기
fun fibonacciSequence() = sequence{
var terms = Pair(0,1)
while(ture){ yield(terms.first)
terms = terms.second to terms.first+terms.second}
//새로운 시퀀스가 생성 될 때 마다 yield 함수는 결과 Pair의 첫번째 원소를 리턴한다
profile
되고싶다

0개의 댓글