📖 Scenario: Imagine you are organizing a list of tasks and want to quickly filter and transform them without writing long, repetitive code. Lambdas help you do this in a neat and functional way.
🎯 Goal: You will create a list of tasks, set a filter condition using a lambda, apply a transformation with another lambda, and finally print the results. This shows how lambdas enable a functional style in Kotlin.
📋 What You'll Learn
Create a list of tasks as strings
Create a lambda to filter tasks containing the word 'code'
Create a lambda to transform tasks to uppercase
Use the lambdas with Kotlin's collection functions
Print the final transformed list
💡 Why This Matters
🌍 Real World
Lambdas let you write clean and reusable code for filtering and transforming data, common in apps and backend services.
💼 Career
Understanding lambdas and functional style is important for Kotlin developers to write modern, efficient, and maintainable code.
Progress0 / 4 steps
1
Create a list of tasks
Create a list called tasks with these exact strings: "write code", "review code", "test app", "deploy app"
Kotlin
Hint
Use listOf to create the list with the exact strings.
2
Create a filter lambda
Create a lambda called filterCodeTasks that takes a String and returns true if it contains the word "code"
Kotlin
Hint
Use the lambda syntax with { task -> task.contains("code") }.
3
Create a transform lambda
Create a lambda called toUpperCase that takes a String and returns the uppercase version of it
Kotlin
Hint
Use uppercase() inside the lambda to convert the string.
4
Filter, transform, and print tasks
Use tasks.filter(filterCodeTasks) to get tasks containing "code", then use map(toUpperCase) to convert them to uppercase, and finally print the resulting list with println
Kotlin
Hint
Chain filter and map with the lambdas, then print the list.
Practice
(1/5)
1. Why do lambdas enable a functional programming style in Kotlin?
easy
A. Because they automatically optimize code for speed
B. Because they replace all loops with recursion
C. Because they require explicit variable declarations
D. Because they allow passing functions as arguments to other functions
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 D
Quick Check:
Lambdas enable passing behavior = C [OK]
Hint: Lambdas let you pass functions like data [OK]
Common Mistakes:
Thinking lambdas only replace loops
Believing lambdas optimize speed automatically
Confusing lambdas with variable declarations
2. Which of the following is the correct syntax for a lambda expression in Kotlin?
easy
A. val sum = { a: Int, b: Int -> a + b }
B. val sum = (a: Int, b: Int) => a + b
C. val sum = fun(a: Int, b: Int) { return a + b }
D. val sum = lambda(a: Int, b: Int) -> a + b
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 A
Quick Check:
Kotlin lambdas use { params -> body } = A [OK]
Hint: Kotlin lambdas use curly braces and arrow -> [OK]
Common Mistakes:
Using => instead of -> in Kotlin
Writing full function syntax inside lambda
Using 'lambda' keyword which Kotlin doesn't have
3. What is the output of this Kotlin code?
val numbers = listOf(1, 2, 3, 4)
val doubled = numbers.map { it * 2 }
println(doubled)
medium
A. Compilation error
B. [1, 2, 3, 4]
C. [2, 4, 6, 8]
D. [3, 6, 9, 12]
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 C
Quick Check:
map doubles each element = [2, 4, 6, 8] [OK]
Hint: map applies lambda to each list item [OK]
Common Mistakes:
Thinking map modifies original list
Confusing map with filter
Expecting syntax error due to lambda
4. Identify the error in this Kotlin code using lambdas:
val list = listOf(1, 2, 3)
val filtered = list.filter { it > 2 }
val result = filtered.map { it * 2 }
println(result)
medium
A. Syntax error in lambda expression
B. No error; code runs and prints [6]
C. filter should be replaced with map
D. map cannot be used after filter
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 B
Quick Check:
filter then map works fine = A [OK]
Hint: filter then map is valid chain [OK]
Common Mistakes:
Assuming syntax error in lambdas
Thinking map can't follow filter
Confusing filter and map roles
5. Given a list of names, how can lambdas help you create a map of name lengths only for names longer than 3 characters? Choose the correct Kotlin code snippet.
hard
A. val result = names.filter { it.length > 3 }.associate { it to it.length }
B. val result = names.map { it.length > 3 }.associateWith { it.length }
C. val result = names.associate { if (it.length > 3) it to it.length }
D. val result = names.map { it.length > 3 }.associate { it to it.length }
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 A
Quick Check:
filter then associate with pairs = B [OK]
Hint: Filter first, then associate with pairs [OK]
Common Mistakes:
Using associateWith incorrectly
Trying to map booleans instead of names
Returning null in associate causing errors
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.