orEmpty 函数
1、基本介绍
- orEmpty 函数是一个用于处理可空对象的扩展函数,当对象为 null 时,它会返回一个对应类型的空实例
- 字符串
String?,当为 null 时返回空字符串"",返回类型为String
kotlin
@kotlin.internal.InlineOnly
public inline fun String?.orEmpty(): String = this ?: ""
- 列表
List<T>?,当为 null 时返回空列表[],返回类型为List<T>
kotlin
@kotlin.internal.InlineOnly
public inline fun <T> List<T>?.orEmpty(): List<T> = this ?: emptyList()
- 集合
Set<T>?,当为 null 时返回空集合[],返回类型为Set<T>
kotlin
@kotlin.internal.InlineOnly
public inline fun <T> Set<T>?.orEmpty(): Set<T> = this ?: emptySet()
- 映射
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()
- 数组
Array<T>?,当为 null 时返回空数组[],返回类型为Array<T>
kotlin
public actual inline fun <reified T> Array<out T>?.orEmpty(): Array<out T> = this ?: emptyArray<T>()
2、基本使用
- 字符串
String?
kotlin
val s: String? = null
println(s.orEmpty())
println(s.orEmpty().length)
# 输出结果
0
- 列表
List<T>?
kotlin
val list: List<Int>? = null
println(list.orEmpty())
println(list.orEmpty().size)
# 输出结果
[]
0
- 集合
Set<T>?
kotlin
val set: Set<String>? = null
println(set.orEmpty())
println(set.orEmpty().size)
# 输出结果
[]
0
- 映射
Map<K, V>?
kotlin
val map: Map<Int, String>? = null
println(map.orEmpty())
println(map.orEmpty().size)
# 输出结果
{}
0
- 数组
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()
}
- 这个 Kotlin 代码在功能上完全等同于 Java 的三元运算符
java
String handleContent = etHandleContent.getText().toString().isEmpty() ? null : etHandleContent.getText().toString();
String handleContent = etHandleContent.getText().toString().isBlank() ? null : etHandleContent.getText().toString();
- 代码还可以更简洁,如果为空字符串则返回 null
kotlin
val handleContent = etHandleContent.text.toString().ifEmpty { null }
val handleContent = etHandleContent.text.toString().ifBlank { null }
-
也可以使用 takeIf 函数,如果满足条件则返回自身,否则返回 null
val handleContent = etHandleContent.text.toString().takeIf { it.isNotEmpty() }
val handleContent = etHandleContent.text.toString().takeIf { it.isNotBlank() }