2012-10-04 80 views
101

Quiero verificar si una colección está vacía y null. ¿Alguien podría decirme las mejores prácticas?Práctica recomendada para validar la colección nula y vacía en Java

Actualmente, estoy comprobando a continuación:

if (null == sampleMap || sampleMap.isEmpty()) { 
    // do something 
} 
else { 
    // do something else 
} 
+6

Aparte de todo lo demás, piense en * por qué * utiliza 'null == sampleMap' en lugar de' sampleMap == null'. La mayoría de las personas considera que este último es más legible; el primero es un vestigio de otros idiomas. –

+1

si le interesa, hay [algo más de argumentación] (http://pushinginertia.com/2011/05/why-yoda-conditions-are-bad-and-usage-of-javas-final-keyword-is- bueno /) en la cosa @JonSkeet mencionó – eis

+0

Por cierto, la colección nula es mala. Si es posible, hágalo colección vacía en su lugar. 'Ver Java efectivo: artículo 43 - Devolver matrices vacías o colecciones, no nulos. ' –

Respuesta

150

Si utiliza la biblioteca Apache Commons Collections en su proyecto, puede utilizar las CollectionUtils.isEmpty y MapUtils.isEmpty() métodos que comprueban, respectivamente, si una colección o un mapa es vacía o nula (es decir, son "null- seguro").

El código detrás de estos métodos es más o menos lo que el usuario @icza ha escrito en su respuesta.

Independientemente de lo que haga, recuerde que cuanto menos código escriba, menos código necesitará probar a medida que disminuya la complejidad de su código.

+0

Gracias MapUtils.isEmpty es la solución perfecta para comprobar que el mapa está vacío o vacío –

46

Esa es la mejor manera de comprobarlo. Se podría escribir un método de ayuda 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(); 
} 
+0

Debe haber una función similar para' Map 'también. –

+1

Claro, también puedes agregar uno para los mapas, pero el título dice colección. – icza

+1

No entiendo si m es nulo, entonces .isEmpty() causará NullPointerException rigth? de lo contrario, si el lado izquierdo (m == nulo) es verdadero, el resto no se marcará – ismail

10

Personalmente, yo prefiero usar colecciones vacías en lugar de null y tienen los algoritmos funcionan de una manera que para el algoritmo no importa si la colección está vacía o no.

2

Si necesita comprobar nulo, ese es el camino. Sin embargo, si tiene control sobre esto, simplemente devuelva la colección vacía, siempre que pueda, y luego solo verifique si está vacía.

This thread es casi lo mismo con C#, pero los principios se aplican igualmente bien a java. Como se menciona allí, nula debe ser devuelto sólo si

  • nula podría significar algo más específico;
  • su API (contrato) puede forzarlo a devolver nulo.
9

Si utiliza Spring Framework, entonces se puede utilizar para comprobar CollectionUtils contra ambas colecciones (Lista, Array) y Mapa etc.

if(CollectionUtils.isEmpty(...)) {...} 
4

Cuando se utiliza la primavera, puede utilizar

boolean isNullOrEmpty = org.springframework.util.ObjectUtils.isEmpty(obj); 

donde obj es cualquier [mapa, colección, serie, aythink ...]

de otro modo: 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 la cadena mejor es:

boolean isNullOrEmpty = (str==null || str.trim().isEmpty()); 
0

Usted puede utilizar org.apache.commons.lang.Validate 's método "notEmpty":

Validate.notEmpty(myCollection) -> Validar que la colección argumento especificado no es nula ni un tamaño de cero (sin elementos); de lo contrario lanzando una excepción.

0

Para todas las colecciones que incluyen el uso del mapa: es el método Vacío que se encuentra en estos objetos de colección. Pero tiene que hacer una comprobación de nulkl antes de

Mapa del mapa;

........ si (mapa = null & & map.isEmpty()!) ......

1

Si está usando Spring Framework se puede utilizar:

CollectionUtils.isEmpty(Collection collection); 

Este método devuelve verdadero si la Colección suministrada es nula o está vacía.

Cuestiones relacionadas