Kotlin 开发 - orEmpty 函数、ifEmpty 函数、ifBlank 函数、takeIf 函数

orEmpty 函数

1、基本介绍
  • orEmpty 函数是一个用于处理可空对象的扩展函数,当对象为 null 时,它会返回一个对应类型的空实例
  1. 字符串 String?,当为 null 时返回空字符串 "",返回类型为 String
kotlin 复制代码
@kotlin.internal.InlineOnly
public inline fun String?.orEmpty(): String = this ?: ""
  1. 列表 List<T>?,当为 null 时返回空列表 [],返回类型为 List<T>
kotlin 复制代码
@kotlin.internal.InlineOnly
public inline fun <T> List<T>?.orEmpty(): List<T> = this ?: emptyList()
  1. 集合 Set<T>?,当为 null 时返回空集合 [],返回类型为 Set<T>
kotlin 复制代码
@kotlin.internal.InlineOnly
public inline fun <T> Set<T>?.orEmpty(): Set<T> = this ?: emptySet()
  1. 映射 Map<K, V>?,当为 null 时返回空映射 {},返回类型为 Map<K, V>
kotlin 复制代码
@kotlin.internal.InlineOnly
public inline fun <K, V> Map<K, V>?.orEmpty(): Map<K, V> = this ?: emptyMap()
  1. 数组 Array<T>?,当为 null 时返回空数组 [],返回类型为 Array<T>
kotlin 复制代码
public actual inline fun <reified T> Array<out T>?.orEmpty(): Array<out T> = this ?: emptyArray<T>()
2、基本使用
  1. 字符串 String?
kotlin 复制代码
val s: String? = null

println(s.orEmpty())
println(s.orEmpty().length)
复制代码
# 输出结果


0
  1. 列表 List<T>?
kotlin 复制代码
val list: List<Int>? = null

println(list.orEmpty())
println(list.orEmpty().size)
复制代码
# 输出结果

[]
0
  1. 集合 Set<T>?
kotlin 复制代码
val set: Set<String>? = null

println(set.orEmpty())
println(set.orEmpty().size)
复制代码
# 输出结果

[]
0
  1. 映射 Map<K, V>?
kotlin 复制代码
val map: Map<Int, String>? = null

println(map.orEmpty())
println(map.orEmpty().size)
复制代码
# 输出结果

{}
0
  1. 数组 Array<T>?
kotlin 复制代码
val arr: Array<Int>? = null

println(arr.orEmpty().contentToString())
println(arr.orEmpty().size)
复制代码
# 输出结果

[]
0

ifEmpty 函数、ifBlank 函数、takeIf 函数

kotlin 复制代码
val handleContent = if (etHandleContent.text.toString().isEmpty()) {
    null
} else {
    etHandleContent.text.toString()
}

val handleContent = if (etHandleContent.text.toString().isBlank()) {
    null
} else {
    etHandleContent.text.toString()
}
  1. 这个 Kotlin 代码在功能上完全等同于 Java 的三元运算符
java 复制代码
String handleContent = etHandleContent.getText().toString().isEmpty() ? null : etHandleContent.getText().toString();

String handleContent = etHandleContent.getText().toString().isBlank() ? null : etHandleContent.getText().toString();
  1. 代码还可以更简洁,如果为空字符串则返回 null
kotlin 复制代码
val handleContent = etHandleContent.text.toString().ifEmpty { null }

val handleContent = etHandleContent.text.toString().ifBlank { null }
  1. 也可以使用 takeIf 函数,如果满足条件则返回自身,否则返回 null

    val handleContent = etHandleContent.text.toString().takeIf { it.isNotEmpty() }

    val handleContent = etHandleContent.text.toString().takeIf { it.isNotBlank() }