Mejores prácticas para validar colecciones nulas y vacías en Java

Resuelto srk asked hace 12 años • 10 respuestas

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
}
srk avatar Oct 04 '12 12:10 srk
Aceptado

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.

Jalayn avatar Oct 04 '2012 07:10 Jalayn

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();
}
icza avatar Oct 04 '2012 05:10 icza

Si usa marcos Spring, puede usarlos CollectionUtilspara comparar las Colecciones (Lista, Matriz) y el Mapa, etc.

if(CollectionUtils.isEmpty(...)) {...}
Saorikido avatar Dec 07 '2016 02:12 Saorikido

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());
Dharmendrasinh Chudasama avatar Mar 06 '2017 09:03 Dharmendrasinh Chudasama