# Server Side Kotlin-15

Custom orders﻿

In Kotlin, achieving custom order for collections involves using comparators and specific functions. Here's a concise explanation:

    Custom Sorting with Comparator:
        Kotlin provides the Comparator interface to define custom sorting orders.
        Use sortedWith() method along with a comparator to sort a collection based on custom criteria.
        Example:
         `list.sortedWith(Comparator { o1, o2 -> customOrder.indexOf(o1) - customOrder.indexOf(o2) })`
          where customOrder is a predefined order .

    Sorting Objects by Property:
        For sorting objects in a list based on a specific property, use sortedWith() with compareBy

For sorting in custom orders or sorting non-comparable objects, there are the functions **sortedBy()** and **sortedByDescending()** . Both takes a **selector function which maps collection elements to Comparable values and sort the collection in natural order of that values.**  
Breakdown:-   

i)-selector function()   
ii)-which maps   

iii)-map collection  elements    
  
iv)-to Comparable value   
v)-and sort the collection   
vi)-finally gives natural order of that value



```
val games = listOf("unity", "unreal", "godot", "bevy", "monogame", "supe rgame" )  

val sortedGames = games.sortedBy { it.length }

println("Sorted by length ascending: $sortedGames")
val sortedByLast = games.sortedByDescending { it.last() }

println("Sorted by the last letter descending: $sortedByLast")
```
Output:-   

Sorted by length ascending: [bevy, unity, godot, unreal, monogame, supe rgame]   

Sorted by the last letter descending: [unity, bevy, godot, unreal, monogame, supe rgame 

By calling sortedWith()  and passing in Comparator, you can define custom order for the collection sorting. Sorting strings become linear.

```   
val games = listOf("unity", "unreal", "godot", "bevy", "monogame", "supe rgame" )  
println("Sorted by length ascending: ${games.sortedWith(compareBy { it.length })}")
```
Output:   

Sorted by length ascending: [bevy, unity, godot, unreal, monogame, supe rgame]    



source: kotlin official web site

