Функция minBy

Функция minBy применяется к коллекциям и возвращает первый элемент, имеющий наименьшее значение, вычисленное с помощью указанной ключевой функции selector. Если коллекция пуста, функция выбрасывает исключение NoSuchElementException.

Импорт

kotlinimport kotlin.collections.minBy

Синтаксис

kotlin// Для Array<T>
inline fun <T, R : Comparable<R>> Array<out T>.minBy(
  selector: (T) -> R
): T
kotlin// Для Iterable<T>
inline fun <T, R : Comparable<R>> Iterable<T>.minBy(
  selector: (T) -> R
): T
kotlin// Для 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 доступна для следующих типов коллекций:

Пример

Найдем минимальный элемент в списке чисел по их абсолютному значению:

kotlinval numbers = listOf(-5, 2, -8, 1, 4)
val minByAbs = numbers.minBy { Math.abs(it) }
println(minByAbs)

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

kotlinInt 1

Пример

Найдем минимальный элемент в массиве строк по их длине:

kotlinval strings = arrayOf("apple", "kiwi", "banana", "pear")
val shortest = strings.minBy { it.length }
println(shortest)

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

kotlinString "kiwi"

Пример

Найдем минимальную запись в словаре по значению:

kotlinval map = mapOf("a" to 10, "b" to 5, "c" to 15)
val minEntry = map.minBy { it.value }
println(minEntry)

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

kotlinb=5

Пример

Работа с пользовательскими объектами - найдем самого молодого человека:

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

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

kotlinPerson(name=Bob, age=22)

Обработка пустых коллекций

Для пустых коллекций функция minBy выбрасывает исключение. Для безопасной работы используйте minByOrNull:

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

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

kotlinCollection is empty
null

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

  • функцию min,
    которая находит минимальный элемент без ключевой функции
  • функцию maxBy,
    которая находит максимальный элемент по ключу
  • функцию sortedBy,
    которая сортирует коллекцию по ключу