Функция 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
,
которая сортирует с использованием компаратора