Mejores prácticas para validar colecciones nulas y vacías en Java
Quiero verificar si una colección está vacía y null
. ¿Alguien podría informarme sobre las mejores prácticas?
Actualmente, estoy comprobando lo siguiente:
if (null == sampleMap || sampleMap.isEmpty()) {
// do something
}
else {
// do something else
}
Si utiliza la biblioteca Apache Commons Collections en su proyecto, puede utilizar los métodos CollectionUtils.isEmpty(...)
y MapUtils.isEmpty(...)
que comprueban respectivamente si una colección o un mapa está vacío o es nulo (es decir, son "seguros para nulos").
El código detrás de estos métodos es más o menos lo que el usuario @icza escribió en su respuesta.
Independientemente de lo que haga, recuerde que cuanto menos código escriba, menos código necesitará probar a medida que la complejidad del código disminuye.
Esa es la mejor manera de comprobarlo. Podrías escribir un método auxiliar para hacerlo:
public static boolean isNullOrEmpty( final Collection< ? > c ) {
return c == null || c.isEmpty();
}
public static boolean isNullOrEmpty( final Map< ?, ? > m ) {
return m == null || m.isEmpty();
}
Si usa marcos Spring, puede usarlos CollectionUtils
para comparar las Colecciones (Lista, Matriz) y el Mapa, etc.
if(CollectionUtils.isEmpty(...)) {...}
Cuando usas primavera entonces puedes usar
boolean isNullOrEmpty = org.springframework.util.ObjectUtils.isEmpty(obj);
donde obj es cualquier [mapa, colección, matriz, cualquier cosa...]
de lo contrario: el código es:
public static boolean isEmpty(Object[] array) {
return (array == null || array.length == 0);
}
public static boolean isEmpty(Object obj) {
if (obj == null) {
return true;
}
if (obj.getClass().isArray()) {
return Array.getLength(obj) == 0;
}
if (obj instanceof CharSequence) {
return ((CharSequence) obj).length() == 0;
}
if (obj instanceof Collection) {
return ((Collection) obj).isEmpty();
}
if (obj instanceof Map) {
return ((Map) obj).isEmpty();
}
// else
return false;
}
para String lo mejor es:
boolean isNullOrEmpty = (str==null || str.trim().isEmpty());