Sequences vs Collections
When each wins.
Sequences vs Collections is a free Kotlin Academy lesson on CoddyKit — lesson 4 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Kotlin Academy learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
Sequences vs Collections
Both sequences and collections offer the same functional operations, but they evaluate differently. Knowing when each wins helps you write efficient, readable code.
Eager Collections Recap
Collections are eager: every operation processes all elements and produces a new collection immediately. This is simple and fast for small data.
fun main() {
val result = listOf(1, 2, 3).map { it + 1 }.filter { it > 2 }
println(result)
}Lazy Sequences Recap
Sequences are lazy: operations build a pipeline that runs per element only when consumed, avoiding intermediate collections.
fun main() {
val result = listOf(1, 2, 3).asSequence().map { it + 1 }.filter { it > 2 }.toList()
println(result)
}When Collections Win
For small collections and short chains, collections are usually faster and clearer. Sequences add overhead per element (iterator calls), which can outweigh their benefits on tiny data.
When Sequences Win
Sequences win when the data is large, the chain is long, or you only need part of the result (first match, first N). They avoid building big intermediate lists and stop early.
fun main() {
val firstEvenSquare = (1..1000000).asSequence()
.map { it * it }
.first { it % 2 == 0 }
println(firstEvenSquare)
}Measuring the Difference
This example with a large range shows how a sequence avoids producing a million-element intermediate list that the eager version would create.
fun main() {
val seqResult = (1..1000).asSequence()
.filter { it % 2 == 0 }
.map { it * 3 }
.take(3)
.toList()
println(seqResult)
}Memory Footprint
Eager chains hold every intermediate list in memory at once. Sequences keep only the current element flowing through, so peak memory stays low for long pipelines.
Short-Circuiting Advantage
If a terminal operation can finish early (first, find, any), sequences skip the remaining elements, while eager collections would have already processed everything.
fun main() {
val found = (1..100).asSequence()
.map { println("checking $it"); it }
.any { it == 3 }
println("Found: $found")
}Watch for Stateful Operations
Operations like sorted, distinct, and groupBy need all elements, so they reduce laziness. A pipeline dominated by these may not benefit from a sequence.
A Practical Guideline
Rule of thumb: default to collections for clarity. Switch to a sequence when you process large data, chain many operations, or only need a small slice of the result. Always measure if performance is critical.
Same API, Different Engine
Because both share the same operation names, you can usually switch by adding or removing asSequence() and a terminal toList(). This makes experimenting with performance low-risk.
fun main() {
val data = listOf(1, 2, 3, 4, 5)
val asList = data.map { it * 2 }.filter { it > 4 }
val asSeq = data.asSequence().map { it * 2 }.filter { it > 4 }.toList()
println(asList == asSeq)
}Quick Check
In which situation is a sequence most likely to outperform a collection?
Recap
Collections are eager and best for small data and clarity; sequences are lazy and best for large data, long chains, or partial results, thanks to no intermediate lists and short-circuiting. Watch out for stateful operations. They share the same API, so switching is easy. This completes the Sequences course.
Frequently asked questions
Is the “Sequences vs Collections” lesson free?
Yes — the full text of “Sequences vs Collections” is free to read here on the web, and the Kotlin Academy course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Kotlin Academy course, upgrade to CoddyKit PRO.
What will I learn in “Sequences vs Collections”?
When each wins. You practise Kotlin Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Kotlin Academy?
No prior experience is required. Kotlin Academy on CoddyKit is structured for beginners through advanced learners; this is — lesson 4 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “Sequences vs Collections” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Kotlin Academy lesson?
Yes. Every Kotlin Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- Why Sequences
- Creating Sequences
- Lazy Operations
- Sequences vs Collections