Функция sortedBy

Функция sortedBy возвращает новую коллекцию, отсортированную в естественном порядке (по возрастанию) по ключу, который возвращает функция-селектор. Функция принимает один параметр - лямбда-функцию, которая преобразует каждый элемент коллекции в ключ для сравнения.

Импорт

kotlinimport kotlin.collections.sortedBy

Синтаксис

kotlin// Для Iterable (List, Set)
inline fun <T, R : Comparable<R>> Iterable<T>.sortedBy(
  crossinline selector: (T) -> R?
): List<T>
kotlin// Для Array
inline fun <T, R : Comparable<R>> Array<out T>.sortedBy(
  selector: (T) -> R?
): List<T>

Для каких коллекций работает

Функция sortedBy доступна для следующих типов коллекций:

Для Map функция sortedBy недоступна напрямую, но можно использовать entries.sortedBy() для сортировки записей карты.

Пример

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

kotlinval words = listOf("abcde", "a", "abc", "ab")
val res = words.sortedBy { it.length }
println(res)

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

kotlinList<String> ['a', 'ab', 'abc', 'abcde']

Пример

Отсортируем массив чисел по их абсолютному значению:

kotlinval numbers = arrayOf(-5, 3, -1, 4, -2)
val res = numbers.sortedBy { Math.abs(it) }
println(res)

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

kotlinList<Int> [-1, -2, 3, 4, -5]

Пример

Отсортируем множество объектов по определенному свойству:

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

val people = setOf(
  Person("John", 25),
  Person("Alice", 30),
  Person("Bob", 20)
)

val res = people.sortedBy { it.age }
println(res)

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

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

Пример

Сортировка с возможностью null значений в ключе:

kotlinval items = listOf("abcde", null, "abc", "ab", null)
val res = items.sortedBy { it?.length }
println(res)

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

kotlinList<String?> [null, null, 'a', 'ab', 'abc', 'abcde']

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

  • функцию sorted,
    которая сортирует элементы в естественном порядке
  • функцию sortedWith,
    которая сортирует с использованием компаратора