Java 8 corriente - cómo hacer correctamente la corriente NPE-segura

ohwelppp:

La semana pasada se puso muy extraña NPE en una corriente que causó mis muchos problemas por lo que en este momento me siento como estar sobre-seguro con NPE cuando se utiliza una corriente.

Aquí es mi método en este momento:

private boolean matchSomeError(final List<ErrorAtMessageLevel> errorList) {
    return errorList.stream()
        .filter(errorAtMessageLevel -> errorAtMessageLevel.getErrorSegment() != null && errorAtMessageLevel.getErrorSegment().getErrorDetails() != null)
        .map(errorAtMessageLevel -> errorAtMessageLevel.getErrorSegment().getErrorDetails())
        .anyMatch(errorDetails -> SOME_FANCY_ERROR_CODE.equals(errorDetails.getErrorCode()));
}

Mi problema es que estoy tratando con POJO externa aquí, así que no puedo cambiar y hacerlo nulo seguro, de modo que tengo que ajustar mi código.

Aquí hay algunas restricciones: 1) ErrorList - no puede ser nulo aquí, así que una llamada a .stream()es segura - cuando está vacía se acaba de regresar falsa 2) getErrorSegment()y getErrorDetails()pueden ser tanto nulos tha Es por eso que estoy usando el filtro de esa manera para asegurarse de que ninguno de ellos es nulo 3) getErrorCode()puede ser nulo pero nunca va a lanzar NPE, ya que sólo volverá falsa cuando se compara con el nula - bien por mí.

¿Cómo haría usted para hacer que la corriente mejor? Siento que mi .filter()es malo y lo que se podría hacer mejor. Escribir un montón de código como el que últimamente, porque no estoy seguro de nada de cómo la corriente está trabajando con nulos y no quiere conseguir en la NPE .map()porque está llamado a nula

Eran :

Se podía filtrar los nulls fuera más elegante de esta manera:

private boolean matchSomeError(final List<ErrorAtMessageLevel> errorList) {
    return errorList.stream()
        .map(ErrorAtMessageLevel::getErrorSegment)
        .filter(Objects:nonNull)
        .map(ErrorSegment::getErrorDetails)
        .filter(Objects:nonNull)
        .anyMatch(errorDetails -> SOME_FANCY_ERROR_CODE.equals(errorDetails.getErrorCode()));
}

Supongo que te gusta

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