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.
Se podría utilizar una larga cadena de Optional
y Stream
operaciones 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 null
listas 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 null
temprano, 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?