firstNotNullOfOrNull
Returns the first non-null value produced by transform function being applied to elements of this sequence in iteration order, or null
if no non-null value was produced.
The operation is terminal.
Returns the first non-null value produced by transform function being applied to elements of this sequence in iteration order, or null
if no non-null value was produced.
The operation is terminal.
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 }
xxxxxxxxxx
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
Thanks for your feedback!