It returns a new list with the elements sorted in natural ascending order without changing the original list.
Click to reveal answer
beginner
How does sortedBy differ from sorted()?
sortedBy sorts elements based on a selector function you provide, allowing custom sorting criteria.
Click to reveal answer
beginner
Example: What is the result of listOf(3, 1, 2).sorted()?
The result is [1, 2, 3], a new list sorted in ascending order.
Click to reveal answer
beginner
Example: How to sort a list of strings by their length using sortedBy?
Use list.sortedBy { it.length } to get a list sorted by string length.
Click to reveal answer
beginner
Does sorted() or sortedBy modify the original list?
No, both return a new sorted list and leave the original list unchanged.
Click to reveal answer
What does sorted() return when called on a list?
AA new list sorted in ascending order
BThe original list sorted in place
CA list sorted in descending order
DAn error if the list is empty
✗ Incorrect
sorted() returns a new list sorted in ascending order without changing the original.
Which function lets you sort a list by a custom property?
Asorted()
Bsort()
Cfilter()
DsortedBy()
✗ Incorrect
sortedBy() sorts elements using a selector function you provide.
What will listOf("apple", "kiwi", "banana").sortedBy { it.length } return?
A["banana", "apple", "kiwi"]
B["apple", "kiwi", "banana"]
C["kiwi", "apple", "banana"]
D["kiwi", "banana", "apple"]
✗ Incorrect
The list is sorted by string length: "kiwi" (4), "apple" (5), "banana" (6).
Does sorted() change the original list?
AYes, it sorts the original list
BNo, it returns a new sorted list
COnly if the list is mutable
DOnly if you assign it back
✗ Incorrect
sorted() always returns a new sorted list and does not modify the original.
Which of these is true about sortedBy?
AIt sorts elements by a key you specify
BIt only works on numbers
CIt sorts elements randomly
DIt sorts elements by their natural order
✗ Incorrect
sortedBy sorts elements based on a key selector function you provide.
Explain how sorted() and sortedBy() work in Kotlin and when you would use each.
Think about sorting numbers vs sorting by a property like length or age.
You got /5 concepts.
Describe a real-life example where sortedBy is more useful than sorted().
Imagine sorting a list of fruits by how long their names are.
You got /4 concepts.
Practice
(1/5)
1. What does the sorted() function do in Kotlin?
easy
A. It sorts the original list in place and returns nothing.
B. It arranges elements randomly in a new list.
C. It returns a new list with elements arranged in natural ascending order.
D. It filters elements based on a condition.
Solution
Step 1: Understand the purpose of sorted()
The sorted() function creates a new list where elements are arranged in natural ascending order (numbers from smallest to largest, strings alphabetically).
Step 2: Check if original list changes
The original list remains unchanged because sorted() returns a new sorted list without modifying the original.
Final Answer:
It returns a new list with elements arranged in natural ascending order. -> Option C
Quick Check:
sorted() = new ascending list [OK]
Hint: sorted() always returns a new ascending list [OK]
Common Mistakes:
Thinking sorted() changes the original list
Confusing sorted() with filtering
Assuming sorted() arranges elements randomly
2. Which of the following is the correct syntax to sort a list of strings by their length using sortedBy in Kotlin?
easy
A. list.sortedBy { it.length }
B. list.sortedBy.length()
C. list.sortedBy(it.length)
D. list.sortedBy { length(it) }
Solution
Step 1: Identify correct lambda syntax for sortedBy
The sortedBy function takes a lambda expression that returns the property to sort by. The correct syntax is list.sortedBy { it.property }.
Step 2: Check each option
list.sortedBy { it.length } uses { it.length } which correctly accesses the length property of each string. Other options have syntax errors or incorrect usage.
Final Answer:
list.sortedBy { it.length } -> Option A
Quick Check:
sortedBy uses lambda with it.property [OK]
Hint: Use curly braces and 'it' to access property in sortedBy [OK]
Common Mistakes:
Using parentheses instead of curly braces
Calling length() as a function incorrectly
Passing property outside lambda
3. What is the output of the following Kotlin code?
val numbers = listOf(5, 3, 8, 1)
val sortedNumbers = numbers.sortedBy { it % 3 }
println(sortedNumbers)
medium
A. [1, 3, 5, 8]
B. [3, 6, 9, 12]
C. [1, 5, 3, 8]
D. [3, 1, 5, 8]
Solution
Step 1: Calculate the sorting key for each element
Calculate it % 3 for each number: 5 % 3 = 2, 3 % 3 = 0, 8 % 3 = 2, 1 % 3 = 1.
Step 2: Sort numbers by these keys
Sort by keys in ascending order: 0 (3), 1 (1), 2 (5), 2 (8). So sorted list is [3, 1, 5, 8].
Final Answer:
[3, 1, 5, 8] -> Option D
Quick Check:
sortedBy { it % 3 } = [3, 1, 5, 8] [OK]
Hint: Calculate sorting key for each element before sorting [OK]
Common Mistakes:
Sorting by values instead of keys
Confusing modulo results
Assuming sortedBy sorts original list
4. Identify the error in this Kotlin code snippet:
val fruits = listOf("apple", "banana", "cherry")
val sortedFruits = fruits.sortedBy(it.length)
println(sortedFruits)
medium
A. sortedBy cannot be used on lists of strings.
B. Missing curly braces around the lambda expression in sortedBy.
C. The list should be mutable to use sortedBy.
D. The println statement is incorrect.
Solution
Step 1: Check syntax of sortedBy usage
The sortedBy function requires a lambda expression inside curly braces, like { it.length }. The code uses parentheses without braces, which is incorrect.
Step 2: Verify other options
sortedBy works on lists of strings, the list can be immutable, and println is correct. So only the lambda syntax is wrong.
Final Answer:
Missing curly braces around the lambda expression in sortedBy. -> Option B
Quick Check:
sortedBy needs { } for lambda [OK]
Hint: Always use curly braces for lambda in sortedBy [OK]
Common Mistakes:
Using parentheses instead of curly braces for lambda
Thinking sortedBy needs mutable list
Misunderstanding println usage
5. Given a list of data class objects data class Person(val name: String, val age: Int), how would you sort the list first by age ascending, then by name alphabetically using Kotlin's sorting functions?
hard
A. persons.sortedWith(compareBy({ it.age }, { it.name }))
B. persons.sortedBy { it.age + it.name }
C. persons.sortedBy { it.name }.sortedBy { it.age }
D. persons.sortedByDescending { it.age }.sortedBy { it.name }
Solution
Step 1: Understand multi-level sorting in Kotlin
To sort by multiple properties, use sortedWith(compareBy(...)) passing lambdas for each property in priority order.
Step 2: Analyze options
persons.sortedWith(compareBy({ it.age }, { it.name })) correctly uses compareBy with age first, then name. persons.sortedBy { it.age + it.name } incorrectly adds age and name (different types). persons.sortedBy { it.name }.sortedBy { it.age } sorts twice but second sort overrides first. persons.sortedByDescending { it.age }.sortedBy { it.name } sorts age descending, not ascending.
Final Answer:
persons.sortedWith(compareBy({ it.age }, { it.name })) -> Option A
Quick Check:
Use sortedWith(compareBy(...)) for multi-level sort [OK]
Hint: Use sortedWith(compareBy(...)) for sorting by multiple keys [OK]
Common Mistakes:
Adding different types in sortedBy
Chaining sortedBy loses previous sort
Using sortedByDescending when ascending needed
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.