TIL

아이템 49 하나 이상의 처리 단계를 가진 경우에는 시퀸스를 사용하라

순서의 중요성

sequenceOf(1, 2, 3)
	.filter { print("F$it, "); it % 2 == 1 }
	.map { print("M$it, "); it * 2 }
	.forEach { print("E$it, ") }
// 출력: F1, M1, E2, F2, F3, M3, E6,

listOf(1, 2, 3)
	.filter { print("F$it, "); it % 2 == 1 }
	.map { print("M$it, "); it * 2 }
	.forEach { print("E$it, ") }
// 출력: F1, F2, F3, M1, M3, E2, E6

최소 연산

(1..10).asSequence()
	.filter { print("F$it, "); it % 2 == 1 }
	.map { print("M$it, "); it * 2 }
	.find { it > 5 }
// 출력: F1, M1, F2, F3, M3,

(1..10)
	.filter { print("F$it, "); it % 2 == 1 }
	.map { print("M$it, "); it * 2 }
	.find { it > 5 }
// 출력: F1, F2, F3, F4, F5 ... M1, M3, M5, M7, M9

무한 시퀸스

generateSequence(1) { it + 1 } // 초기값과 그 다음 요소의 계산 방법을 지정
	.map { it * 2 }
	.take(10)
	.forEach { print("$it, ") }
// 출력: 2, 4, 6, 8, 10, 12, 14, 16, 18, 20

각 단계에서 컬렉션을 만들어 내지 않음

시퀸스가 빠르지 않은 경우

자바 스트림의 경우

코틀린 시퀸스 디버깅