first Not Null Of
Начиная с Kotlin: 1.5
inline fun <T, R : Any> Array<out T>.firstNotNullOf(transform: (T) -> R?): R
Возвращает первое ненулевое значение, полученное при применении функции transform к элементам этого массива в порядке итерации, или выбрасывает NoSuchElementException, если ненулевое значение не было получено.
Примеры
import kotlin.math.*
import kotlin.test.*
fun main() {
//sampleStart
data class Rectangle(val height: Int, val width: Int) {
val area: Int get() = height * width
}
val rectangles = listOf(
Rectangle(3, 4),
Rectangle(1, 8),
Rectangle(6, 3),
Rectangle(4, 3),
Rectangle(5, 7)
)
val largeArea = rectangles.firstNotNullOf { it.area.takeIf { area -> area >= 15 } }
val largeAreaOrNull = rectangles.firstNotNullOfOrNull { it.area.takeIf { area -> area >= 15 } }
println(largeArea) // 18
println(largeAreaOrNull) // 18
// val evenLargerArea = rectangles.firstNotNullOf { it.area.takeIf { area -> area >= 50 } } // will fail with NoSuchElementException
val evenLargerAreaOrNull = rectangles.firstNotNullOfOrNull { it.area.takeIf { area -> area >= 50 } }
println(evenLargerAreaOrNull) // null
//sampleEnd
}
inline fun <T, R : Any> Iterable<T>.firstNotNullOf(transform: (T) -> R?): R
Возвращает первое ненулевое значение, полученное при применении функции transform к элементам этой коллекции в порядке итерации, или выбрасывает NoSuchElementException, если ненулевое значение не было получено.
Примеры
import kotlin.math.*
import kotlin.test.*
fun main() {
//sampleStart
data class Rectangle(val height: Int, val width: Int) {
val area: Int get() = height * width
}
val rectangles = listOf(
Rectangle(3, 4),
Rectangle(1, 8),
Rectangle(6, 3),
Rectangle(4, 3),
Rectangle(5, 7)
)
val largeArea = rectangles.firstNotNullOf { it.area.takeIf { area -> area >= 15 } }
val largeAreaOrNull = rectangles.firstNotNullOfOrNull { it.area.takeIf { area -> area >= 15 } }
println(largeArea) // 18
println(largeAreaOrNull) // 18
// val evenLargerArea = rectangles.firstNotNullOf { it.area.takeIf { area -> area >= 50 } } // will fail with NoSuchElementException
val evenLargerAreaOrNull = rectangles.firstNotNullOfOrNull { it.area.takeIf { area -> area >= 50 } }
println(evenLargerAreaOrNull) // null
//sampleEnd
}
inline fun <K, V, R : Any> Map<out K, V>.firstNotNullOf(transform: (Map.Entry<K, V>) -> R?): R
Возвращает первое ненулевое значение, полученное при применении функции transform к записям этой карты в порядке итерации, или выбрасывает NoSuchElementException, если ненулевое значение не было получено.
Примеры
import kotlin.math.*
import kotlin.test.*
fun main() {
//sampleStart
data class Rectangle(val height: Int, val width: Int) {
val area: Int get() = height * width
}
val rectangles = listOf(
Rectangle(3, 4),
Rectangle(1, 8),
Rectangle(6, 3),
Rectangle(4, 3),
Rectangle(5, 7)
)
val largeArea = rectangles.firstNotNullOf { it.area.takeIf { area -> area >= 15 } }
val largeAreaOrNull = rectangles.firstNotNullOfOrNull { it.area.takeIf { area -> area >= 15 } }
println(largeArea) // 18
println(largeAreaOrNull) // 18
// val evenLargerArea = rectangles.firstNotNullOf { it.area.takeIf { area -> area >= 50 } } // will fail with NoSuchElementException
val evenLargerAreaOrNull = rectangles.firstNotNullOfOrNull { it.area.takeIf { area -> area >= 50 } }
println(evenLargerAreaOrNull) // null
//sampleEnd
}
© 2010–2026 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
https://kotlinlang.org/api/core/kotlin-stdlib/kotlin.collections/first-not-null-of.html