ifEmpty所在位置是kotlin.collections.ifEmpty,其相关用法介绍如下。

用法一

inline fun <C, R> C.ifEmpty(
    defaultValue: () -> R
): R where C : Array<*>, C : R

如果该数组不为空,则返回该数组;如果该数组为空,则返回调用defaultValue 函数的结果。

例子:

import kotlin.test.*

fun main(args: Array<String>) {
//sampleStart
val emptyArray: Array<Any> = emptyArray()

val emptyOrNull: Array<Any>? = emptyArray.ifEmpty { null }
println(emptyOrNull) // null

val emptyOrDefault: Array<Any> = emptyArray.ifEmpty { arrayOf("default") }
println(emptyOrDefault.contentToString()) // [default]

val nonEmptyArray = arrayOf(1)
val sameArray = nonEmptyArray.ifEmpty { arrayOf(2) }
println("nonEmptyArray === sameArray is ${nonEmptyArray === sameArray}") // true
//sampleEnd
}

输出:

null
[default]
nonEmptyArray === sameArray is true

用法二

inline fun <M, R> M.ifEmpty(
    defaultValue: () -> R
): R where M : Map<*, *>, M : R

如果Map不为空,则返回此Map;如果Map为空,则返回调用defaultValue 函数的结果。

例子:

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

fun main(args: Array<String>) {
//sampleStart
val emptyMap: Map<String, Int> = emptyMap()

val emptyOrNull = emptyMap.ifEmpty { null }
println(emptyOrNull) // null

val emptyOrDefault: Map<String, Any> = emptyMap.ifEmpty { mapOf("s" to "a") }
println(emptyOrDefault) // {s=a}

val nonEmptyMap = mapOf("x" to 1)
val sameMap = nonEmptyMap.ifEmpty { null }
println("nonEmptyMap === sameMap is ${nonEmptyMap === sameMap}") // true
//sampleEnd
}

输出:

null
{s=a}
nonEmptyMap === sameMap is true