Функция minBy
Функция minBy применяется к коллекциям и возвращает
первый элемент, имеющий наименьшее значение, вычисленное
с помощью указанной ключевой функции selector.
Если коллекция пуста, функция выбрасывает исключение
NoSuchElementException.
Импорт
import kotlin.collections.minBy
Синтаксис
// Для Array<T>
inline fun <T, R : Comparable<R>> Array<out T>.minBy(
selector: (T) -> R
): T
// Для Iterable<T>
inline fun <T, R : Comparable<R>> Iterable<T>.minBy(
selector: (T) -> R
): T
// Для Map<K, V>
inline fun <K, V, R : Comparable<R>> Map<out K, V>.minBy(
selector: (Map.Entry<K, V>) -> R
): Map.Entry<K, V>
Поддерживаемые типы коллекций
Функция minBy доступна для следующих типов коллекций:
Array- массивыList- спискиSet- множестваMap- словари (работает с записями Map.Entry)Iterable- любые итерируемые коллекцииSequence- последовательности
Пример
Найдем минимальный элемент в списке чисел по их абсолютному значению:
val numbers = listOf(-5, 2, -8, 1, 4)
val minByAbs = numbers.minBy { Math.abs(it) }
println(minByAbs)
Результат выполнения кода:
Int 1
Пример
Найдем минимальный элемент в массиве строк по их длине:
val strings = arrayOf("apple", "kiwi", "banana", "pear")
val shortest = strings.minBy { it.length }
println(shortest)
Результат выполнения кода:
String "kiwi"
Пример
Найдем минимальную запись в словаре по значению:
val map = mapOf("a" to 10, "b" to 5, "c" to 15)
val minEntry = map.minBy { it.value }
println(minEntry)
Результат выполнения кода:
b=5
Пример
Работа с пользовательскими объектами - найдем самого молодого человека:
data class Person(val name: String, val age: Int)
val people = listOf(
Person("John", 25),
Person("Alice", 30),
Person("Bob", 22)
)
val youngest = people.minBy { it.age }
println(youngest)
Результат выполнения кода:
Person(name=Bob, age=22)
Обработка пустых коллекций
Для пустых коллекций функция minBy выбрасывает исключение.
Для безопасной работы используйте minByOrNull:
val emptyList = emptyList<Int>()
try {
val result = emptyList.minBy { it }
println(result)
} catch (e: NoSuchElementException) {
println("Collection is empty")
}
val safeResult = emptyList.minByOrNull { it }
println(safeResult)
Результат выполнения кода:
Collection is empty
null