Echa un vistazo a este kotlin one liner:
val nonNullArr : List<NonNullType> = nullArray.filter {it != null} El compilador da un error de tipo en esta línea, diciendo que una lista de anulables no se puede asignar a una lista de no nulos. Pero el filtro condicional se asegura de que la lista solo contenga valores no nulos. ¿Hay algo similar a !! operador que puedo usar en esta situación para compilar este código?
Parece lógico suponer que el compilador tendría en cuenta el predicado
it != nulle inferir el tipo como
List<NonNullType> pero no es así.
Hay 2 soluciones:
val nonNullList: List<NonNullType> = nullableArray.filterNotNull()o
val nonNullList: List<NonNullType> = nullableArray.mapNotNull { it }Hasta donde yo sé, no puede convertir tipos anulables en tipos no nulos simplemente verificando que no sean nulos. Para lograr lo que desea, debe asignar manualmente valores anulables a un tipo no nulo simplemente creando un objeto de tipo NonNull. Para ello, puede utilizar la función de extensión de mapa.
val nullableArray: Array<String?> = arrayOf("abc", "xyz", null, "efg") val nonNullList: List<String> = nullableArray.filter { it != null }.map { it.toString() } O puede usar el método filterNotNull() como @forpas sugirió en los comentarios
val nonNullList: List<String> = nullableArray.filterNotNull()¡Espero que te ayude!
No puede asignar un tipo que admite valores NULL a un tipo de valor que no admite valores NULL. La coincidencia de tipos puede funcionar cuando asigna un valor, no después de llamar a la operación de filter .
// the type-matching works before `.filter` is called val nonNullArr : List<NonNullType> = nullArray//.filter {it != null} en cambio, si desea hacer esto sin un error o sin importar el tipo. Elimina el tipo del val , para que quede así
val nonNullArr = nullArray.filter {it != null}Espero eso ayude