kotlin-sort-list-feature-image

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

Leave a Reply

Your email address will not be published. Required fields are marked *