📖 Scenario: You are managing a small library database. You have a list of book titles and their availability status. You want to find all available books without using traditional loops.
🎯 Goal: Build a Kotlin program that uses collection operations instead of loops to filter available books from a list.
📋 What You'll Learn
Create a list of books with their availability status
Create a variable to hold the availability filter
Use a collection operation to filter available books
Store the filtered list in a new variable
💡 Why This Matters
🌍 Real World
Filtering and transforming data collections is common in database queries and data processing tasks.
💼 Career
Understanding collection operations helps write concise and efficient code for data manipulation in software development.
Progress0 / 4 steps
1
Create the initial list of books
Create a list called books with these exact entries: "The Hobbit" to true, "1984" to false, "Brave New World" to true, "Fahrenheit 451" to false, "The Catcher in the Rye" to true. Use a list of pairs.
Kotlin
Hint
Use listOf with pairs like "Title" to availability.
2
Create the availability filter variable
Create a variable called available and set it to true to represent the availability status you want to filter by.
Kotlin
Hint
Use val available = true to set the filter.
3
Filter available books using collection operations
Create a variable called availableBooks and assign it the result of filtering books where the availability status equals available. Use the filter collection operation with a lambda that uses it.second == available.
Kotlin
Hint
Use filter with a lambda checking it.second == available.
4
Complete by extracting only book titles
Create a variable called availableTitles and assign it the result of mapping availableBooks to extract only the book titles using map with it.first.
Kotlin
Hint
Use map to get the first element of each pair.
Practice
(1/5)
1. Why do Kotlin collection operations like map and filter often replace traditional loops?
easy
A. They make the code simpler and easier to read.
B. They run faster than any loop.
C. They require less memory than loops.
D. They only work with numbers.
Solution
Step 1: Understand the purpose of collection operations
Collection operations like map and filter apply actions to each item in a collection in a clear way.
Step 2: Compare with traditional loops
Traditional loops can be longer and harder to read, while collection operations simplify the code.
Final Answer:
They make the code simpler and easier to read. -> Option A
Quick Check:
Collection operations simplify code = A [OK]
Hint: Collection operations simplify and clarify loops [OK]
Common Mistakes:
Thinking collection operations always run faster
Believing they use less memory by default
Assuming they only work with numbers
2. Which of the following is the correct Kotlin syntax to replace a loop that prints each item in a list items using a collection operation?
easy
A. items.printEach()
B. items.forEach { println(it) }
C. forEach(items) { println(it) }
D. items.each { println(it) }
Solution
Step 1: Recall the correct collection operation syntax
The forEach function is called on the collection like items.forEach { ... }.
Step 2: Check each option
items.forEach { println(it) } uses correct syntax. Options A, B, and D are invalid Kotlin syntax.
Calling non-existent methods like printEach or each
Incorrect placement of braces
3. What is the output of this Kotlin code?
val numbers = listOf(1, 2, 3, 4)
val result = numbers.filter { it % 2 == 0 }.map { it * 10 }
println(result)
medium
A. [20, 40]
B. [10, 20]
C. [2, 4]
D. [1, 2, 3, 4]
Solution
Step 1: Apply the filter operation
The filter keeps only even numbers: 2 and 4.
Step 2: Apply the map operation
Each filtered number is multiplied by 10: 2*10=20, 4*10=40.
Final Answer:
[20, 40] -> Option A
Quick Check:
Filter evens then multiply by 10 = [20, 40] [OK]
Hint: Filter first, then map to transform [OK]
Common Mistakes:
Confusing filter and map order
Expecting original list output
Multiplying before filtering
4. Identify the error in this Kotlin code that tries to print all names in a list:
val names = listOf("Anna", "Bob", "Cara")
names.map { println(it) }
medium
A. The code is correct and prints all names.
B. The list is empty, so nothing prints.
C. println cannot be used inside map.
D. map is used incorrectly; forEach should be used for printing.
Solution
Step 1: Understand the purpose of map
map transforms each item and returns a new list; it is not meant for side effects like printing.
Step 2: Identify correct operation for printing
forEach is designed for performing actions like printing on each item without creating a new list.
Final Answer:
map is used incorrectly; forEach should be used for printing. -> Option D
Quick Check:
Use forEach for actions, map for transformations [OK]
Hint: Use forEach for actions, map for creating new lists [OK]
Common Mistakes:
Using map for side effects like printing
Assuming map prints automatically
Confusing map and forEach purposes
5. Given a list of user ages ages = listOf(12, 17, 20, 25, 30), which Kotlin collection operation chain correctly returns a list of ages over 18 multiplied by 2?
hard
A. ages.map { it * 2 }.filter { it > 18 }
B. ages.filter { it * 2 > 18 }
C. ages.filter { it > 18 }.map { it * 2 }
D. ages.map { if (it > 18) it * 2 else it }
Solution
Step 1: Filter ages over 18
We first keep only ages greater than 18: 20, 25, 30.
Step 2: Multiply filtered ages by 2
Then multiply each by 2: 40, 50, 60.
Final Answer:
ages.filter { it > 18 }.map { it * 2 } -> Option C
Quick Check:
Filter then map for correct result [OK]
Hint: Filter first, then map to transform [OK]
Common Mistakes:
Mapping before filtering changes values incorrectly
Filtering after mapping filters wrong values
Using map with conditional without filtering
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.