Lista que contiene valores anulables a una Lista anulable en Kotlin

Tengo una List<T?> Que contiene valores nulos (que, supongo, no está prohibido). Si un elemento de esta list es nulo, quiero que toda la list sea nula (lo que la gente de Haskell llama sequence ). El siguiente pseudocódigo demuestra lo que quiero hacer:

 fun <T> sequence(a : List<T?>) : List<T>? { return a.fold( listOf(), { prevArray, element -> if(element == null) null else prevArray + element }) } 

Esto es un pseudocódigo porque el comstackdor se queja de que Null can not be a value of a non-null type kotlin.collections.List<T> .

¿Cuál es la forma idiomática de express lo que quiero en Kotlin? Usando el tipo Optional de Java, esto es al less comstackble:

 fun <T> sequence(a : List<T?>) : Optional<List<T>> { return a.fold( Optional.of(listOf()), { prevArray, element -> if(element == null) Optional.empty<List<T>>() else Optional.of(prevArray + element) }) } 

Pero Kotlin tiene muchos operadores y funcionalidades con respecto al manejo nulo, así que pensé que usar null directamente sería más idiomático.

Puede usar un retorno no local para regresar de la function de sequence :

 fun <T> sequence(a: List<T?>): List<T>? { return a.fold(listOf()) { prevArray, element -> if (element == null) return null else prevArray + element } } 

Sin embargo, resolvería el problema que describió con una simple expresión-y, para evitar muchas asignaciones de lists que ocurren porque la adición de lists crea una nueva list respaldada por una matriz para cada elemento. La advertencia de conversión desactivada se suprime a continuación porque el comstackdor no puede darse count de que la list no contiene nulos en ese punto, aunque podemos ver claramente que ese es el caso:

 fun <T> sequence(a: List<T?>): List<T>? { @Suppress("UNCHECKED_CAST") return if (a.any { it == null }) null else a as List<T> } 
  • Cómo pasar la matriz de cadenas al bash de correo electrónico de Android
  • Kotlin: Collection no tiene tipo genérico ni OneToMany.targetEntity ()
  • Verificando si el resultado de un cálculo es un número integer
  • ¿Falta la list de Kotlin "agregar", "eliminar", etc.?
  • Pase listOf (mapOf (x, y, z)) como parámetro en Kotlin
  • ¿Es posible definir un valor pnetworkingeterminado para una function de parámetro?
  • Hashmap con tipo de datos ArrayList (Kotlin)?
  • El file spring-configuration-metadata.json no se genera en IntelliJ Idea for Kotlin @ConfigurationProperties class
  • Una confusión sobre Int :: class.java.isInstance () en Kotlin
  • ¿Cómo agrego create-react-kotlin-app como module al proyecto kotlin-multiplataforma?
  • ¿Existe alguna forma más simple de express classs anónimas en Kotlin?