Quiero verificar si una colección está vacía y null
. ¿Podría alguien decirme la mejor práctica?
Actualmente, estoy comprobando lo siguiente:
if (null == sampleMap || sampleMap.isEmpty()) {
// do something
}
else {
// do something else
}
srk
Quiero verificar si una colección está vacía y null
. ¿Podría alguien decirme la mejor práctica?
Actualmente, estoy comprobando lo siguiente:
if (null == sampleMap || sampleMap.isEmpty()) {
// do something
}
else {
// do something else
}
Jalayn
Si usas el Colecciones Apache Commons biblioteca en su proyecto, puede utilizar la CollectionUtils.isEmpty
y MapUtils.isEmpty()
métodos que verifican respectivamente si una colección o un mapa es vacío o nulo (es decir, son “a prueba de nulos”).
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 la complejidad de su código disminuya.
icza
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();
}
Debe haber una función similar para Map<?>
también.
–Luiggi Mendoza
4 de octubre de 2012 a las 5:59
Claro, también puede agregar uno para mapas, pero el título indica colección.
– icza
4 de octubre de 2012 a las 6:06
No entiendo si m es nulo, entonces .isEmpty() causará NullPointerException ¿verdad? de lo contrario, si el lado izquierdo (m==null) es verdadero, el resto no se verificará
– Ismail Sahin
29 de julio de 2016 a las 8:46
@ismail El ||
operador es un operador de cortocircuito, lo que significa que si el operando izquierdo es true
, no evaluará el operando correcto. Así que si m == null
después m.isEmpty()
no será llamado (no es necesario, el resultado es true
).
– icza
29 de julio de 2016 a las 9:05
Si usa marcos Spring, entonces puede usar CollectionUtils
para verificar tanto las Colecciones (Lista, Matriz) como el Mapa, etc.
if(CollectionUtils.isEmpty(...)) {...}
Personalmente, prefiero usar colecciones vacías en lugar de null
y hacer que los algoritmos funcionen de manera que para el algoritmo no importe si la colección está vacía o no.
Dharmendrasinh Chudasama
Cuando usas primavera, entonces puedes usar
boolean isNullOrEmpty = org.springframework.util.ObjectUtils.isEmpty(obj);
donde obj es cualquier [map,collection,array,aything…]
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 mejor es:
boolean isNullOrEmpty = (str==null || str.trim().isEmpty());
Verificaremos que un objeto Collection esté vacío, sea nulo o no. todos estos métodos que se dan a continuación, están presentes en el paquete org.apache.commons.collections4.CollectionUtils.
Compruebe en Lista o establezca el tipo de objetos de colección.
CollectionUtils.isEmpty(listObject);
CollectionUtils.isNotEmpty(listObject);
Verifique el tipo de Mapa de Objetos.
MapUtils.isEmpty(mapObject);
MapUtils.isNotEmpty(mapObject);
El tipo de retorno de todos los métodos es booleano.
María Inés Parnisari
Puedes usar org.apache.commons.lang.Validate
‘s “no vacío” método:
Validate.notEmpty(myCollection)
-> Validar que la colección de argumentos especificada no sea nula ni de tamaño cero (sin elementos); de lo contrario lanzando una excepción.
Esta es una buena alternativa para validaciones de parámetros ya que CollectionUtils.isEmpty(...)
no está presente en versiones anteriores de la biblioteca. sin embargo, el Validate.notEmpty(...)
El método lanza una excepción cuando está vacío. En @srk, el escenario no funcionará si creemos que usar una excepción es malo para el control de flujo. web.archive.org/web/20140430044213/http://c2.com/cgi-bin/…
– Jefre
22 de julio a las 20:25
Aparte de cualquier otra cosa, piensa en por qué tu usas
null == sampleMap
más bien quesampleMap == null
. La mayoría de la gente encuentra este último más legible; el primero es un vestigio de otros idiomas.– Jon Skeet
4 de octubre de 2012 a las 6:03
Por cierto, la colección nula es mala. Si es posible, haz que sea una colección vacía en su lugar.
See Effective Java: Item 43 - Return empty arrays or collections, not nulls.
– 卢声远 Shengyuan Lu
23 de diciembre de 2015 a las 4:56
La gente de @JonSkeet usa null == sampleMap en caso de que escriba = en lugar de ==. si usa sampleMap == null, cuando olvida uno =, se convierte en sampleMap = null, lo que no generará un error, por lo que escribirlo de otra manera ayuda al desarrollador a verlo
– Uri Loya
14 de noviembre de 2019 a las 14:39
@UriLoya: Si escribes
if (null = sampleMap)
en Java obtendrá un error de compilación. Ese es precisamente el punto de mi primer comentario. La “razón” de esto es específica del idioma, pero se ha propagado a otros idiomas a pesar de la penalización de legibilidad porque las personas no han considerado por qué están haciendo eso.– Jon Skeet
14 de noviembre de 2019 a las 14:41
Puede usar la clase CollectionUtils que está presente en el paquete org.apache.commons.collections4.CollectionUtils. Hay muchos métodos de utilidad para encontrar vacíos o nulos.
– vikash
18 de marzo de 2020 a las 10:14