包含可为空值的列表到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()