АКЦИЯ: бесплатные месячные курсы по созданию сайтов
на выбор: верстка, JavaScript, PHP, Python или фреймворки. Сегодня последний день для записи! Жми!
461 of 1310 menu
Новый формат обучения! Репетиторство по программированию. Есть еще 3 свободных места! Жми для подробностей.

Функция sortedBy

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

Импорт

import kotlin.collections.sortedBy

Синтаксис

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

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

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

  • Array - массивы
  • List - списки
  • Set - множества
  • Iterable - любые итерируемые коллекции

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

Пример

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

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

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

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

Пример

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

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

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

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

Пример

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

data 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)

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

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

Пример

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

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

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

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

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

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