Bird
Raised Fist0
Kotlinprogramming~20 mins

GroupBy for categorization in Kotlin - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
GroupBy Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this Kotlin code using groupBy?

Consider this Kotlin code that groups a list of words by their first letter. What will be printed?

Kotlin
val words = listOf("apple", "banana", "apricot", "blueberry", "cherry")
val grouped = words.groupBy { it.first() }
println(grouped)
A[[apple, apricot], [banana, blueberry], [cherry]]
B{apple=[a, p, p, l, e], banana=[b, a, n, a, n, a], apricot=[a, p, r, i, c, o, t], blueberry=[b, l, u, e, b, e, r, r, y], cherry=[c, h, e, r, r, y]}
C{a=[apple, apricot], b=[banana, blueberry], c=[cherry]}
D{a=[apple], b=[banana], a=[apricot], b=[blueberry], c=[cherry]}
Attempts:
2 left
💡 Hint

Remember that groupBy creates a map where keys are the grouping criteria and values are lists of items matching that key.

❓ Predict Output
intermediate
2:00remaining
What is the output of grouping numbers by even or odd?

Given this Kotlin code, what will be printed?

Kotlin
val numbers = listOf(1, 2, 3, 4, 5, 6)
val grouped = numbers.groupBy { if (it % 2 == 0) "even" else "odd" }
println(grouped)
A{true=[2, 4, 6], false=[1, 3, 5]}
B[[1, 3, 5], [2, 4, 6]]
C{0=[2, 4, 6], 1=[1, 3, 5]}
D{even=[2, 4, 6], odd=[1, 3, 5]}
Attempts:
2 left
💡 Hint

Look at the string keys used in the groupBy lambda.

🔧 Debug
advanced
2:00remaining
Why does this Kotlin code cause a compilation error?

Look at this Kotlin code that tries to group a list of strings by length but causes a compilation error. What is the cause?

Kotlin
val words = listOf("cat", "dog", "bird")
val grouped = words.groupBy { length }
println(grouped)
AThe lambda uses 'length' without 'it.', so 'length' is undefined.
BThe list 'words' is immutable, so groupBy cannot be called.
CThe groupBy function requires a return type of Int, but 'length' is a String.
DThe println statement is missing parentheses.
Attempts:
2 left
💡 Hint

Check how to access the length property of each string inside the lambda.

🧠 Conceptual
advanced
2:00remaining
How many groups are created by this Kotlin groupBy call?

Given this code, how many keys will the resulting map have?

Kotlin
val items = listOf("red", "green", "blue", "yellow", "black")
val grouped = items.groupBy { it.length }
println(grouped.keys.size)
A5
B4
C3
D2
Attempts:
2 left
💡 Hint

Count the distinct lengths of the strings in the list.

❓ Predict Output
expert
2:00remaining
What is the output of this Kotlin code grouping by first letter and counting?

What will this Kotlin code print?

Kotlin
val words = listOf("ant", "ape", "bat", "bear", "cat", "car")
val grouped = words.groupBy { it.first() }.mapValues { it.value.size }
println(grouped)
A{a=2, b=2, c=2}
B{a=2, b=3, c=2}
C{a=3, b=2, c=2}
D{a=[ant, ape], b=[bat, bear], c=[cat, car]}
Attempts:
2 left
💡 Hint

Look at how mapValues transforms the grouped map.

Practice

(1/5)
1. What does the groupBy function do in Kotlin?
easy
A. It sorts a list in ascending order.
B. It organizes a list into a map based on a key selector function.
C. It removes duplicate elements from a list.
D. It converts a list into a set.

Solution

  1. Step 1: Understand the purpose of groupBy

    The groupBy function takes a list and groups its elements by a key, returning a map.
  2. Step 2: Compare with other functions

    Sorting, removing duplicates, and converting to set do different things than grouping by a key.
  3. Final Answer:

    It organizes a list into a map based on a key selector function. -> Option B
  4. Quick Check:

    groupBy = organize by key [OK]
Hint: Remember: groupBy creates categories as map keys [OK]
Common Mistakes:
  • Confusing groupBy with sorting functions
  • Thinking groupBy removes duplicates
  • Mixing groupBy with set conversion
2. Which of the following is the correct syntax to group a list of strings by their first character in Kotlin?
easy
A. val result = list.groupBy { it.first() }
B. val result = list.groupBy(it -> it.first())
C. val result = list.groupBy { it.first }
D. val result = list.groupBy { first(it) }

Solution

  1. Step 1: Review Kotlin lambda syntax

    Kotlin uses curly braces with it for single-parameter lambdas: { it.first() }.
  2. Step 2: Check each option

    val result = list.groupBy { it.first() } uses correct Kotlin syntax. val result = list.groupBy(it -> it.first()) uses arrow syntax which is invalid here. val result = list.groupBy { it.first } omits parentheses on first() method call, causing compile error. val result = list.groupBy { first(it) } calls undefined function first().
  3. Final Answer:

    val result = list.groupBy { it.first() } -> Option A
  4. Quick Check:

    Use curly braces and it.first() [OK]
Hint: Use curly braces and 'it' for lambda in groupBy [OK]
Common Mistakes:
  • Using arrow syntax inside groupBy lambda
  • Calling undefined functions like first(it)
  • Omitting parentheses on first() method call
3. What is the output of the following Kotlin code?
val numbers = listOf(1, 2, 3, 4, 5, 6)
val grouped = numbers.groupBy { if (it % 2 == 0) "even" else "odd" }
println(grouped)
medium
A. {odd=[1, 3, 5], even=[2, 4, 6]}
B. {1=[1], 2=[2], 3=[3], 4=[4], 5=[5], 6=[6]}
C. {true=[2, 4, 6], false=[1, 3, 5]}
D. SyntaxError

Solution

  1. Step 1: Understand the grouping condition

    The lambda groups numbers by "even" if divisible by 2, else "odd".
  2. Step 2: Group numbers accordingly

    Numbers 2,4,6 go to "even"; 1,3,5 go to "odd".
  3. Final Answer:

    {odd=[1, 3, 5], even=[2, 4, 6]} -> Option A
  4. Quick Check:

    Group by even/odd labels [OK]
Hint: Check grouping keys carefully for expected output [OK]
Common Mistakes:
  • Confusing keys with values in output
  • Expecting boolean keys instead of strings
  • Thinking groupBy sorts the list
4. Identify the error in this Kotlin code snippet:
val words = listOf("apple", "banana", "apricot")
val grouped = words.groupBy { it[0] }
println(grouped)
medium
A. Indexing with it[0] is invalid for strings
B. Must convert characters to strings before grouping
C. groupBy requires a function, not a lambda
D. No error; code runs and groups by first character

Solution

  1. Step 1: Check indexing on strings

    In Kotlin, strings support indexing with [0] to get first character.
  2. Step 2: Validate groupBy usage

    The lambda { it[0] } is valid and groups words by their first character.
  3. Final Answer:

    No error; code runs and groups by first character -> Option D
  4. Quick Check:

    Strings support indexing; groupBy accepts lambdas [OK]
Hint: Remember strings can be indexed like arrays in Kotlin [OK]
Common Mistakes:
  • Thinking indexing strings causes error
  • Believing groupBy needs named functions only
  • Assuming characters must be converted to strings
5. Given a list of people represented as pairs Pair<String, Int> where the first element is the name and the second is the age, how would you group them by age category "minor" (age < 18) or "adult" (age >= 18) using groupBy?
hard
A. people.groupBy { it.first }
B. people.groupBy { it.first.length }
C. people.groupBy { if (it.second < 18) "minor" else "adult" }
D. people.groupBy { it.second }

Solution

  1. Step 1: Identify grouping key based on age

    We want to group by "minor" if age < 18, else "adult".
  2. Step 2: Use groupBy with conditional key

    Access age with it.second and apply if-else to return category string.
  3. Final Answer:

    people.groupBy { if (it.second < 18) "minor" else "adult" } -> Option C
  4. Quick Check:

    Group by age category using conditional [OK]
Hint: Use if-else inside groupBy lambda for categories [OK]
Common Mistakes:
  • Grouping by name or name length instead of age
  • Grouping by exact age instead of categories
  • Confusing first and second in Pair
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard