firstNotNullOf
所在位置是kotlin.collections.firstNotNullOf
,其相關用法介紹如下。
用法一
返回由transform函數產生的第一個非空值,該函數按迭代順序應用於此數組的元素,如果沒有產生非空值,則拋出NoSuchElementException。
例子:
import kotlin.test.*
fun main(args: Array<String>) {
//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
}
輸出:
18 18 null
用法二
返回由transform函數產生的第一個非空值,該函數按迭代順序應用於此集合的元素,如果沒有產生非空值,則拋出NoSuchElementException。
例子:
import kotlin.test.*
fun main(args: Array<String>) {
//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
}
輸出:
18 18 null
用法三
返回由transform函數產生的第一個非空值,該函數按迭代順序應用於此映射的條目,如果沒有產生非空值,則拋出NoSuchElementException。
例子:
import kotlin.test.*
fun main(args: Array<String>) {
//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
}
輸出:
18 18 null
相關用法
- Kotlin firstNotNullOfOrNull用法及代碼示例
- Kotlin filterNot用法及代碼示例
- Kotlin filterNotTo用法及代碼示例
- Kotlin filterKeys用法及代碼示例
- Kotlin filterTo用法及代碼示例
- Kotlin filterNotNull用法及代碼示例
- Kotlin filterIsInstance用法及代碼示例
- Kotlin filterIsInstanceTo用法及代碼示例
- Kotlin findLast用法及代碼示例
- Kotlin find用法及代碼示例
- Kotlin filterNotNullTo用法及代碼示例
- Kotlin filterIndexedTo用法及代碼示例
- Kotlin filterValues用法及代碼示例
- Kotlin filter用法及代碼示例
- Kotlin filterIndexed用法及代碼示例
- Kotlin flatten用法及代碼示例
- Kotlin forEach用法及代碼示例
- Kotlin flatMap用法及代碼示例
- Kotlin fold用法及代碼示例
- Kotlin foldTo用法及代碼示例
- Kotlin flatMapIndexed用法及代碼示例
- Kotlin associateBy用法及代碼示例
- Kotlin all用法及代碼示例
- Kotlin map用法及代碼示例
- Kotlin reduceRight用法及代碼示例
注:本文由純淨天空篩選整理自kotlinlang.org大神的英文原創作品 kotlin.collections.firstNotNullOf。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。