Для сортировки вы должны использовать Comparator
. Контракт компаратора описан здесь в методе сравнения здесь
Сравнивает два его аргумента для заказа. Возвращает ноль, если аргументы равны, отрицательное число, если первый аргумент меньше второго, или положительное число, если первый аргумент больше второго.
Так что в нашем случае мы берем две строки a
и b
и мы посмотрим, в каком положении находится k.
Пример:
a = "clock" // position of 'k' is 4
b = "kite" // position of 'k' is 0
Сравнение этих двух 4 - 0 = 4
приводит к положительному числу, которое означает, что первый аргумент больше второго.
a = "kite" // position of 'k' is 0
b = "rekt" // position of 'k' is 3
Сравнение этих двух 0 - 3 = -3
приводит к отрицательному числу, что означает, что первый аргумент меньше второго.
Код:
var list = mutableListOf("clock", "kite", "rekt", "abcd")
list.retainAll { it.contains("k") }
// Ascending Order
list.sortWith(Comparator {a, b -> a.indexOf('k') - b.indexOf('k')})
println(list) // [kite, rekt, clock]
// Descending Order
list.sortWith(Comparator {a, b -> b.indexOf('k') - a.indexOf('k')})
println(list) // [clock, rekt, kite]
// Cleaner and more concise syntax thanks to @Tenfour04
list.sortWith( compareBy { it.indexOf('k') } )
list.sortWith( compareByDescending { it.indexOf('k') } )