Java 8 cheque nulo anidada una cadena en un mapa en una lista

adbdkb:

Necesito hacer una serie de controles null (null controles anidados) para obtener una matriz de cadenas, como a continuación

String[] test;
if(CollectionUtils.isNotEmpty(checkList)){
    if(MapUtils.isNotEmpty(checkList.get(0))){
        if(StringUtils.isNotBlank(checkList.get(0).get("filename"))){
            test = checkList.get(0).get("filename").split("_");
        }
    }
}

¿Hay una mejor manera, tal vez usando Java8 opcional, para llevar a cabo este tipo de controles anidados? Me trató sin éxito de uso opcional con flatmap / mapa.

John Kugelman:

Se podría utilizar una larga cadena de Optionaly Streamoperaciones para transformar el paso a paso de entrada en la salida. Algo como esto (no probado):

String[] test = Optional.ofNullable(checkList)
    .map(Collection::stream)
    .orElseGet(Stream::empty)
    .findFirst()
    .map(m -> m.get("filename"))
    .filter(f -> !f.trim().isEmpty())
    .map(f -> f.split("_"))
    .orElse(null);

Yo te animo a dejar de usar nulllistas y mapas. Es mucho mejor usar vacíos colecciones en lugar de nulos colecciones, de esa manera usted no tiene que tener cheques nulos todos los lados. Además, no permita que las cadenas vacías o en blanco en sus colecciones; filtrarlos o sustituirlos por nulltemprano, tan pronto como se va a convertir la entrada del usuario en objetos en memoria. Usted no quiere tener que insertar llamadas a trim()y isBlank()y similares por todo el lugar.

Si hiciera eso se podría simplificar a:

String[] test = checkList.stream()
    .findFirst()
    .map(m -> m.get("filename"))
    .map(f -> f.split("_"))
    .orElse(null);

Mucho mejor, ¿no?

Supongo que te gusta

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