Kotlin List sort, sorted, sortBy, sortedBy, sortWith, sortedWith example

In this tutorial, I will show you many ways to sort Kotlin List using sort, sorted, sortBy, sortedBy, sortWith, sortedWith methods.

Related Posts:
Kotlin List & Mutable List tutorial with examples
Kotlin – Sort List of custom Objects


Kotlin sort

You can use sort() method to sort a Mutable List in-place, and sortDescending() for descending order.

Ascending

val nums = mutableListOf(3, 1, 7, 2, 8, 6) nums.sort() // nums: [1, 2, 3, 6, 7, 8] 

Descending

nums.sortDescending(); // nums: [8, 7, 6, 3, 2, 1] 

Kotlin sorted

sorted() and sortedDescending() don’t change the original List. Instead, they return another sorted List.

Ascending

val nums = mutableListOf(3, 1, 7, 2, 8, 6) val sortedNums = nums.sorted() // nums: [3, 1, 7, 2, 8, 6] // sortedNums: [1, 2, 3, 6, 7, 8] 

Descending

val sortedNumsDescending = nums.sortedDescending() // nums: [3, 1, 7, 2, 8, 6] // sortedNumsDescending: [8, 7, 6, 3, 2, 1] 

Kotlin sortBy

sortBy() helps us to sort a Multable List in-place by specific field. We need to pass a selector function as an argument.

For descending order, we use sortByDescending().

Ascending

val myDates = mutableListOf(	MyDate(4, 3),	MyDate(5, 16),	MyDate(1, 29) ) myDates.sortBy { it.month } myDates.forEach { println(it) } /* MyDate(month=1, day=29) MyDate(month=4, day=3) MyDate(month=5, day=16) */ 

Descending

myDates.sortByDescending { it.month } myDates.forEach { println(it) } /* MyDate(month=5, day=16) MyDate(month=4, day=3) MyDate(month=1, day=29) */ 

Kotlin sortedBy

Instead of changing the order of original List. sortedBy() and sortedByDescending() return a sorted List, the original List isn’t affected.

Ascending

val myDates = mutableListOf(	MyDate(4, 3),	MyDate(5, 16),	MyDate(1, 29) ) val sortedDates = myDates.sortedBy { it.month } myDates.forEach { println(it) } /* MyDate(month=4, day=3) MyDate(month=5, day=16) MyDate(month=1, day=29) */ sortedDates.forEach { println(it) } /* MyDate(month=1, day=29) MyDate(month=4, day=3) MyDate(month=5, day=16) */ 

Descending

val sortedDatesDescending = myDates.sortedByDescending { it.month } myDates.forEach { println(it) } /* MyDate(month=4, day=3) MyDate(month=5, day=16) MyDate(month=1, day=29) */ sortedDatesDescending.forEach { println(it) } /* MyDate(month=5, day=16) MyDate(month=4, day=3) MyDate(month=1, day=29) */ 

Kotlin sortWith

How about continue to sort day after sorting month?
We’re gonna use sortWith() for ascending order and additional method reverse() for descending order.

Ascending

val myDates = mutableListOf(	MyDate(8, 19),	MyDate(5, 16),	MyDate(1, 29),	MyDate(5, 10),	MyDate(8, 3) ) myDates.sortWith(compareBy { it.month }.thenBy { it.day }) myDates.forEach { println(it) } /* MyDate(month=1, day=29) MyDate(month=5, day=10) MyDate(month=5, day=16) MyDate(month=8, day=3) MyDate(month=8, day=19) */ 

Descending

myDates.reverse() sortedDatesDescending.forEach { println(it) } /* MyDate(month=8, day=19) MyDate(month=8, day=3) MyDate(month=5, day=16) MyDate(month=5, day=10) MyDate(month=1, day=29) */ 

Kotlin sortedWith

sortedWith() and reversed() return a sorted List instead of changing original List order.

Ascending

val sortedDates = myDates.sortedWith(compareBy { it.month }.thenBy { it.day }) myDates.forEach { println(it) } /* MyDate(month=8, day=19) MyDate(month=5, day=16) MyDate(month=1, day=29) MyDate(month=5, day=10) MyDate(month=8, day=3) */ sortedDates.forEach { println(it) } /* MyDate(month=1, day=29) MyDate(month=5, day=10) MyDate(month=5, day=16) MyDate(month=8, day=3) MyDate(month=8, day=19) */ 

Descending

val sortedDatesDescending = myDates.sortedWith(compareBy { it.month }.thenBy { it.day }).reversed() myDates.forEach { println(it) } /* MyDate(month=8, day=19) MyDate(month=5, day=16) MyDate(month=1, day=29) MyDate(month=5, day=10) MyDate(month=8, day=3) */ sortedDatesDescending.forEach { println(it) } /* MyDate(month=8, day=19) MyDate(month=8, day=3) MyDate(month=5, day=16) MyDate(month=5, day=10) MyDate(month=1, day=29) */ 

Sort List of Objects

It’s more complicated, so I write in a separated Tutorial. You can find at:
Kotlin – Sort List of custom Objects

Further Reading

3 thoughts to “Kotlin List sort, sorted, sortBy, sortedBy, sortWith, sortedWith example”

  1. Every weekend I used to visit your articles, your Kotlin tutorials really help me a lot.

Comments are closed to reduce spam. If you have any question, please send me an email.