mapNotNull所在位置是kotlin.collections.mapNotNull,其相關用法介紹如下。

用法一

inline fun <T, R : Any> Array<out T>.mapNotNull(
    transform: (T) -> R?
): List<R>

返回一個列表,其中僅包含將給定 transform 函數應用於原始數組中的每個元素的非空結果。

例子:

import kotlin.test.*

fun main(args: Array<String>) {
//sampleStart
val strings: List<String> = listOf("12a", "45", "", "3")
val ints: List<Int> = strings.mapNotNull { it.toIntOrNull() }

println(ints) // [45, 3]
println(ints.sum()) // 48
//sampleEnd
}

輸出:

[45, 3]
48

用法二

inline fun <T, R : Any> Iterable<T>.mapNotNull(
    transform: (T) -> R?
): List<R>

返回一個列表,其中僅包含將給定 transform 函數應用於原始集合中的每個元素的非空結果。

例子:

import kotlin.test.*

fun main(args: Array<String>) {
//sampleStart
val strings: List<String> = listOf("12a", "45", "", "3")
val ints: List<Int> = strings.mapNotNull { it.toIntOrNull() }

println(ints) // [45, 3]
println(ints.sum()) // 48
//sampleEnd
}

輸出:

[45, 3]
48

用法三

inline fun <K, V, R : Any> Map<out K, V>.mapNotNull(
    transform: (Entry<K, V>) -> R?
): List<R>

返回一個列表,其中僅包含將給定 transform 函數應用於原始映射中的每個條目的非空結果。

例子:

import kotlin.test.*
import java.util.*

fun main(args: Array<String>) {
//sampleStart
val map = mapOf("Alice" to 20, "Tom" to 13, "Bob" to 18)
val adults = map.mapNotNull { (name, age) -> name.takeIf { age >= 18 } }

println(adults) // [Alice, Bob]
//sampleEnd
}

輸出:

[Alice, Bob]