It transforms each element of a collection into another collection and then flattens all those collections into a single list.
Click to reveal answer
beginner
Given a list of lists, how does flatMap help compared to using map?
map returns a list of lists, while flatMap returns a single flattened list combining all inner lists.
Click to reveal answer
beginner
Example: What is the output of listOf(listOf(1, 2), listOf(3, 4)).flatMap { it }?
The output is [1, 2, 3, 4] because flatMap flattens the nested lists into one list.
Click to reveal answer
intermediate
Why is flatMap useful when working with nested collections?
It simplifies code by combining mapping and flattening steps, making it easier to work with nested data structures.
Click to reveal answer
intermediate
How would you use flatMap to get all characters from a list of words in Kotlin?
Use words.flatMap { it.toList() } to convert each word to a list of characters and flatten them into one list.
Click to reveal answer
What does flatMap return when applied to a list of lists?
AA set of unique elements
BA single flattened list containing all elements
CA map of keys to values
DA list of lists
✗ Incorrect
flatMap flattens nested collections into one list by combining mapping and flattening.
Which Kotlin function would you use to transform and flatten a nested collection in one step?
Areduce
Bfilter
Cfold
DflatMap
✗ Incorrect
flatMap is designed to transform and flatten nested collections in one operation.
What is the difference between map and flatMap?
A<code>map</code> returns nested collections, <code>flatMap</code> flattens them
B<code>map</code> flattens collections, <code>flatMap</code> does not
CBoth do the same thing
D<code>flatMap</code> only works on strings
✗ Incorrect
map transforms elements but keeps nested structure; flatMap flattens the result.
What will listOf("hi", "ok").flatMap { it.toList() } return?
A[h, i]
B[hi, ok]
C[h, i, o, k]
D[o, k]
✗ Incorrect
Each word is converted to a list of characters, then all characters are combined into one list.
If you want to get a list of all numbers from a list of lists of numbers, which function is best?
AflatMap
Bfilter
Cmap
Dsorted
✗ Incorrect
flatMap combines all inner lists into one list of numbers.
Explain how flatMap works with nested collections in Kotlin.
Think about turning many small lists into one big list.
You got /3 concepts.
Describe a real-life example where flatMap would simplify working with nested data.
Imagine a list of classrooms each with a list of students.
You got /3 concepts.
Practice
(1/5)
1. What does the flatMap function do when applied to a nested list in Kotlin?
easy
A. It filters elements based on a condition.
B. It sorts the nested lists in ascending order.
C. It transforms each element and flattens the result into a single list.
D. It converts the list into a set to remove duplicates.
Solution
Step 1: Understand flatMap behavior
flatMap applies a transformation to each element and then flattens the nested results into one list.
Step 2: Compare with other functions
Unlike sorting, filtering, or converting to a set, flatMap combines mapping and flattening in one step.
Final Answer:
It transforms each element and flattens the result into a single list. -> Option C
Quick Check:
flatMap = transform + flatten [OK]
Hint: Remember: flatMap = map + flatten in one step [OK]
Common Mistakes:
Confusing flatMap with filter or sort
Thinking flatMap removes duplicates
Assuming flatMap only maps without flattening
2. Which of the following is the correct syntax to use flatMap on a list of lists named nestedList in Kotlin?
easy
A. nestedList.flatMap { it }
B. nestedList.flatMap()
C. nestedList.flatMap -> it
D. nestedList.flatMap { it.flatten() }
Solution
Step 1: Identify correct lambda syntax
The flatMap function requires a lambda to transform each element. { it } returns each inner list as is.
Step 2: Check other options
nestedList.flatMap() misses lambda, C uses wrong arrow syntax, D uses flatten() incorrectly on flat inner lists.
Final Answer:
nestedList.flatMap { it } -> Option A
Quick Check:
flatMap needs a lambda like { it } [OK]
Hint: flatMap always needs a lambda block { } [OK]
Common Mistakes:
Omitting the lambda block
Using arrow (->) instead of curly braces
Using flatten() instead of identity mapping
3. What is the output of the following Kotlin code?
val nested = listOf(listOf(1, 2), listOf(3, 4))
val result = nested.flatMap { it.map { it * 2 } }
println(result)
medium
A. [[2, 4], [6, 8]]
B. [1, 2, 3, 4]
C. [2, 4, [6, 8]]
D. [2, 4, 6, 8]
Solution
Step 1: Understand inner map transformation
Each inner list element is multiplied by 2, so listOf(1,2) becomes listOf(2,4), and listOf(3,4) becomes listOf(6,8).
Step 2: Apply flatMap flattening
flatMap flattens the transformed lists into one list: [2, 4, 6, 8].
Final Answer:
[2, 4, 6, 8] -> Option D
Quick Check:
flatMap + map doubles and flattens [OK]
Hint: flatMap flattens after map transformation [OK]
Common Mistakes:
Expecting nested lists instead of flat list
Ignoring the inner map multiplication
Confusing output with original nested list
4. Identify the error in this Kotlin code snippet using flatMap:
val nested = listOf(listOf(1, 2), listOf(3, 4))
val result = nested.flatMap { it * 2 }
println(result)
medium
A. flatMap requires a filter inside the lambda.
B. Cannot multiply a list by an integer directly.
C. The variable 'nested' is not defined.
D. flatMap should be replaced with map.
Solution
Step 1: Analyze the lambda expression
The lambda tries to multiply it (a list) by 2, which is invalid in Kotlin.
Step 2: Understand flatMap requirements
flatMap expects a lambda returning an iterable, but it * 2 causes a type error.
Final Answer:
Cannot multiply a list by an integer directly. -> Option B
Quick Check:
List * Int is invalid in Kotlin [OK]
Hint: Check types inside lambda; lists can't be multiplied by numbers [OK]
Common Mistakes:
Assuming list * number works like in some other languages
Thinking flatMap needs a filter
Confusing map and flatMap usage
5. Given a list of students where each student has a list of grades, how can you use flatMap to get a single list of all grades above 70?
data class Student(val name: String, val grades: List<Int>)
val students = listOf(
Student("Alice", listOf(80, 65)),
Student("Bob", listOf(90, 72)),
Student("Carol", listOf(60, 85))
)
// Fill in the blank:
val passingGrades = students.flatMap { ________ }
println(passingGrades)
hard
A. it.grades.filter { grade -> grade > 70 }
B. it.grades.map { grade -> grade > 70 }
C. it.grades.filter { grade -> grade < 70 }
D. it.grades
Solution
Step 1: Filter grades above 70 for each student
Inside the lambda, use it.grades.filter { grade -> grade > 70 } to keep only passing grades.
Step 2: Use flatMap to flatten all filtered grades
flatMap combines all filtered lists into one flat list of passing grades.