Функция sortedWith

Функция sortedWith выполняет сортировку элементов коллекции с использованием объекта Comparator, который определяет порядок сортировки. Возвращает новую отсортированную коллекцию, не изменяя исходную. Работает с массивами Array, списками List и множествами Set. Для коллекций Map функция недоступна.

Импорт

kotlinimport kotlin.collections.sortedWith

Синтаксис

kotlinfun <T> Array<out T>.sortedWith(comparator: Comparator<in T>): List<T>
kotlinfun <T> Iterable<T>.sortedWith(comparator: Comparator<in T>): List<T>

Пример

Отсортируем массив чисел в обратном порядке:

kotlinval numbers = arrayOf(3, 1, 4, 1, 5, 9)
val comparator = compareBy<Int> { it }.reversed()
val res = numbers.sortedWith(comparator)
println(res)

Результат выполнения кода:

kotlinList<Int> [9, 5, 4, 3, 1, 1]

Пример

Отсортируем список строк по длине:

kotlinval words = listOf("apple", "banana", "cherry", "date")
val comparator = compareBy<String> { it.length }
val res = words.sortedWith(comparator)
println(res)

Результат выполнения кода:

kotlinList<String> ["date", "apple", "banana", "cherry"]

Пример

Отсортируем множество по пользовательскому компаратору:

kotlinval numbers = setOf(15, 7, 23, 4, 19)
val comparator = Comparator<Int> { a, b -> a % 10 - b % 10 }
val res = numbers.sortedWith(comparator)
println(res)

Результат выполнения кода:

kotlinList<Int> [23, 4, 15, 7, 19]

Пример

Сортировка с использованием нескольких критериев:

kotlindata class Person(val name: String, val age: Int)

val people = listOf(
  Person("Alice", 25),
  Person("Bob", 30),
  Person("Charlie", 25)
)

val comparator = compareBy<Person> { it.age }.thenBy { it.name }
val res = people.sortedWith(comparator)
println(res)

Результат выполнения кода:

kotlinList<Person> [Person(name=Alice, age=25), Person(name=Charlie, age=25), Person(name=Bob, age=30)]

Смотрите также

  • функцию sorted,
    которая выполняет естественную сортировку
  • функцию sortedBy,
    которая сортирует по ключу
  • функцию sortedDescending,
    которая сортирует в обратном порядке