包含可为空值的列表到Kotlin中的可为空列表
我有一个包含空值的包含可为空值的列表到Kotlin中的可为空列表,kotlin,Kotlin,我有一个包含空值的列表(我想这是不被禁止的)。如果此列表中的一个元素为null,我希望整个列表为null(Haskell称之为序列)。以下伪代码演示了我要执行的操作: fun <T> sequence(a : List<T?>) : List<T>? { return a.fold( listOf(), { prevArray, element ->
列表
(我想这是不被禁止的)。如果此列表中的一个元素为null,我希望整个列表为null(Haskell称之为序列
)。以下伪代码演示了我要执行的操作:
fun <T> sequence(a : List<T?>) : List<T>? {
return
a.fold(
listOf(),
{
prevArray, element ->
if(element == null) null else prevArray + element
})
}
但是Kotlin有许多关于null处理的运算符和功能,因此我认为直接使用null更为惯用。您可以使用a从序列返回函数:
fun <T> sequence(a: List<T?>): List<T>? {
return a.fold(listOf()) {
prevArray, element ->
if (element == null) return null else prevArray + element
}
}
使用库,您现在可以执行以下操作:
fun <T> sequence(a : List<T?>) : List<T>? = a.flatten()?.toList()
fun sequence(a:List):List?=a、 展平()
请注意,要使用第二个变量,您必须确保列表a
以后不会添加新的null
元素。或者您可以只复制一次,以避免@ilya提到的问题
fun <T> sequence(a: List<T?>): List<T>? {
@Suppress("UNCHECKED_CAST")
return if (a.any { it == null }) null else a as List<T>
}
fun <T> sequence(a : List<T?>) : List<T>? = a.flatten()?.toList()