Kotlin Sorting
Order records for a report without changing the owned input list.
How it works
sorted returns a new list, while sort changes a mutable list. sortedBy chooses one key; compareBy and thenBy describe a multi-key ordering. Kotlin collection sorts are stable, but an explicit final key is helpful when you require a total deterministic order.
Run this Kotlin example
These are local Kotlin/JVM programs. Install a JDK and the compiler using the official Kotlin compiler guide, or use an IDE with Kotlin support. Check java -version and kotlinc -version in a new terminal. The reviewed compiler is Kotlin 2.4.21 with a JVM 21 target, executed on Temurin JDK 25.0.5. Use JDK 21 or newer for this target. Android, Kotlin/JS and Kotlin/Native require separate platform projects and are not the tested environment here.
Save the complete source as sorting.kt in its own learning folder. The package line gives this example a namespace, not a network address. Bhylu has no Kotlin browser runner; do not use the JavaScript or Python editor. Apache, PHP and MySQL are not required.
Compile with kotlinc sorting.kt -jvm-target 21 -include-runtime -d lesson.jar, then run java -jar lesson.jar. Use a learning folder you own and keep generated JARs outside the website. These sources require no third-party application libraries.
Download the complete sorting.kt · Download all source files with hash checks
For the optional collection, save download-examples.mjs in a new learning folder and run node download-examples.mjs. A local preview uses node download-examples.mjs http://127.0.0.1:8000/examples/kotlin/. It refuses an existing bhylu-kotlin-examples folder and installs or executes no Kotlin code. Compile one ordinary lesson at a time by filename.
Example
package bhylu.lessons.k_sorting
data class Bike(val id: String, val checks: Int)
fun main() {
val rows = listOf(Bike("B-42", 2), Bike("B-18", 1), Bike("B-31", 1))
val ordered = rows.sortedWith(compareBy<Bike> { it.checks }.thenBy { it.id })
println(ordered.map { it.id })
println(rows.map { it.id })
}
Expected result
[B-18, B-31, B-42] [B-42, B-18, B-31]
The report sorts by check count and then identifier, while the input retains its original order. The comparator reads stable fields rather than changing state during comparisons.
For exact language and library contracts, consult the official Kotlin documentation. These fictional fixtures are learning programs, not a deployed hire service.