NPE cuando se utiliza la correlación {} en NULL que contienen ArrayList

Arnie Schwarzvogel:

Me estoy poniendo

java.lang.NullPointerException: intento de invocar virtual método 'float java.lang.Number.floatValue ()' en una referencia de objeto nulo

el siguiente código:

val localHistory: ArrayList<Float> = ArrayList<Float>()
...    
val strHistory = localHistory.map { value -> decoration.decoratedValue(ref.format, value) }

Me acabo de enterar de que ArrayList puede contener valores nulos (Oookay). Eso significaría que el valor en el mapa de cierre de transformación puede ser NULL, no?

Pero esto no puede ser ya que el valor no es un tipo opcional y el compilador dice que si (valor! = Null) será siempre verdad.

Así que la pregunta es cómo evitar la NPE en este caso?

Lino:

Sugiero que marcar cada parámetro en un Collectionrecibes de Java como anulable (a menos que, por supuesto, usted sabe que nunca puede ser null:

val floats: List<Float?> = someJavaClass.getFloats()

A continuación, puede filtrar la nulls y hacer su operación mapa:

val newFloats: List<Float> = floats
    .filter { it != null }
    .map { it + 1 }

Tenga en cuenta que cada filter, mapoperación (y así sucesivamente) se repetirá toda la colección y crear una nueva en cada vez. Usted es mejor de utilizar Sequences, que son iterados con pereza.

Como se mencionó en los comentarios se puede utilizar filterNotNullpara filtrar directamente todos los valores nulos:

val newFloats: List<Float> = floats
    .filterNotNull()
    .map { it + 1 }

Y mapNotNullsólo para mantener los valores que mapean-función no devuelve null, esto también elimina la filterNotNull:

val newFloats: List<Float> = floats
    .mapNotNull { it?.plus(1) }

Otra construcción que puedo pensar que trabaja con su ejemplo, a pesar de que es muy díficil de leer y solo complejo. Pero aquí está:

val strHistory = localHistory
    .mapNotNull { decoration.decoratedValue(ref.format, it ?: return@mapNotNull null) }

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=197641&siteId=1
Recomendado
Clasificación