Careeroza
Sequences vs Collections
Eager vs Lazy
Collection operations (list.map { }.filter { }) are eager: each step processes the whole list and creates a new list. A Sequence is lazy: each element goes through the whole chain one by one, and nothing runs until a terminal operation (toList, first, sum...).
List: [1,2,3,4] ─map─► [..4 items..] ─filter─► [..] ─first─► result (2 temporary lists) Sequence: 1 ─map─filter─✗ 2 ─map─filter─✓ first ─► result (stops early, no lists)
See the Order
Example
fun main() {
val nums = listOf(1, 2, 3, 4, 5)
println("List (eager):")
val a = nums.map { println(" map $it"); it * 10 }
.filter { println(" filter $it"); it > 20 }
.first()
println(" result $a")
println("Sequence (lazy):")
val b = nums.asSequence()
.map { println(" map $it"); it * 10 }
.filter { println(" filter $it"); it > 20 }
.first()
println(" result $b")
}Output
List (eager): map 1 map 2 map 3 map 4 map 5 filter 10 filter 20 filter 30 filter 40 filter 50 result 30 Sequence (lazy): map 1 filter 10 map 2 filter 20 map 3 filter 30 result 30
Comparison
| Iterable / List | Sequence | |
|---|---|---|
| Evaluation | eager, step by step | lazy, element by element |
| Intermediate collections | one per operation | none |
| Can be infinite | no | yes |
| Fast for | small lists, few operations, need indexes | big data, many chained operations, first/take |
| Java equivalent | - | java.util.stream.Stream (sequential) |