Why lambdas enable functional style in Kotlin - Performance Analysis
We want to see how using lambdas affects the speed of running code in Kotlin.
Specifically, how does the program's work grow when we use lambdas in a functional style?
Analyze the time complexity of the following code snippet.
val numbers = listOf(1, 2, 3, 4, 5)
val doubled = numbers.map { it * 2 }
val filtered = doubled.filter { it > 5 }
println(filtered)
This code doubles each number in a list, then keeps only those greater than 5.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Two list traversals: one for
mapand one forfilter. - How many times: Each traversal goes through all elements once.
Each element is processed twice: once to double, once to check the filter.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 20 operations (2 x 10) |
| 100 | About 200 operations (2 x 100) |
| 1000 | About 2000 operations (2 x 1000) |
Pattern observation: The work grows roughly twice as fast as the input size.
Time Complexity: O(n)
This means the time to run grows directly in proportion to the number of items in the list.
[X] Wrong: "Using lambdas always makes the code slower because of extra function calls."
[OK] Correct: While lambdas add small overhead, the main work is still looping through the list, so the overall time grows linearly with input size, not worse.
Understanding how lambdas affect time helps you explain your code choices clearly and shows you know how functional style works under the hood.
"What if we combined the map and filter into one loop using a single lambda? How would the time complexity change?"
Practice
Solution
Step 1: Understand what lambdas do
Lambdas are small functions that can be passed around like data.Step 2: Connect lambdas to functional style
Functional programming relies on passing behavior (functions) as arguments, which lambdas enable.Final Answer:
Because they allow passing functions as arguments to other functions -> Option DQuick Check:
Lambdas enable passing behavior = C [OK]
- Thinking lambdas only replace loops
- Believing lambdas optimize speed automatically
- Confusing lambdas with variable declarations
Solution
Step 1: Recall Kotlin lambda syntax
Kotlin lambdas use curly braces with parameters before the arrow, like { a, b -> ... }.Step 2: Compare options
val sum = { a: Int, b: Int -> a + b } matches Kotlin syntax. Options B, C, and D use syntax from other languages or incorrect forms.Final Answer:
val sum = { a: Int, b: Int -> a + b } -> Option AQuick Check:
Kotlin lambdas use { params -> body } = A [OK]
- Using => instead of -> in Kotlin
- Writing full function syntax inside lambda
- Using 'lambda' keyword which Kotlin doesn't have
val numbers = listOf(1, 2, 3, 4)
val doubled = numbers.map { it * 2 }
println(doubled)Solution
Step 1: Understand the map function with lambda
map applies the lambda to each element, here multiplying each by 2.Step 2: Calculate the transformed list
1*2=2, 2*2=4, 3*2=6, 4*2=8, so the list becomes [2, 4, 6, 8].Final Answer:
[2, 4, 6, 8] -> Option CQuick Check:
map doubles each element = [2, 4, 6, 8] [OK]
- Thinking map modifies original list
- Confusing map with filter
- Expecting syntax error due to lambda
val list = listOf(1, 2, 3)
val filtered = list.filter { it > 2 }
val result = filtered.map { it * 2 }
println(result)Solution
Step 1: Analyze filter and map usage
filter keeps elements greater than 2, so only 3 remains.Step 2: Apply map to filtered list
map multiplies 3 by 2, resulting in [6].Final Answer:
No error; code runs and prints [6] -> Option BQuick Check:
filter then map works fine = A [OK]
- Assuming syntax error in lambdas
- Thinking map can't follow filter
- Confusing filter and map roles
Choose the correct Kotlin code snippet.
Solution
Step 1: Filter names longer than 3 characters
Use filter { it.length > 3 } to keep only long names.Step 2: Create a map of name to length
Use associate { it to it.length } to map each name to its length.Final Answer:
val result = names.filter { it.length > 3 }.associate { it to it.length } -> Option AQuick Check:
filter then associate with pairs = B [OK]
- Using associateWith incorrectly
- Trying to map booleans instead of names
- Returning null in associate causing errors
Ready to prove it?
Pass the test and this pattern moves unknown
