2011-06-05 19 views
9

que estaba buscando a través del código de una aplicación antigua de Android mío, y vi una cosa que hice para el efecto de esto:formas de comprobar si un ArrayList contiene sólo valores nulos

 boolean emptyArray = true; 
     for (int i = 0; i < array.size(); i++) 
     { 
      if (array.get(i) != null) 
      { 
        emptyArray = false; 
        break; 
      } 
     } 
     if (emptyArray == true) 
     { 
      return true; 
     } 
     return false; 

Tiene que ser una forma más eficiente de hacer esto, pero ¿qué es?

emptyArray se define como una ArrayList de enteros, que se insertan con un número aleatorio de valores nulos (y más adelante en el código, valores enteros reales).

Gracias!

+0

Por cierto, sólo tiene que utilizar si '(emptyArray)' en lugar de 'si (emptyArray == true)' –

Respuesta

6

No existe manera más eficiente. Lo único es que puede hacer, es escribirlo en forma más elegante:

List<Something> l; 

boolean nonNullElemExist= false; 
for (Something s: l) { 
    if (s != null) { 
    nonNullElemExist = true; 
    break; 
    } 
} 

// use of nonNullElemExist; 

En realidad, es posible que esto sea más eficiente, ya que utiliza Iterator y el compilador Hotspot tiene más información para optimizar en lugar de utilizar size() y get().

+0

_Comentaré mi propia respuesta_: poniéndola en funciones como _Bohemian_ lo hizo, es mucho más útil –

19

Bueno, se podría utilizar mucho menos código para empezar:

public boolean isAllNulls(Iterable<?> array) { 
    for (Object element : array) 
     if (element != null) return false; 
    return true; 
} 

Con este código, puede pasar en una variedad mucho más amplia de colecciones también.


Java 8 actualización:

public static boolean isAllNulls(Iterable<?> array) { 
    return StreamSupport.stream(array.spliterator(), true).allMatch(o -> o == null); 
} 
+0

¿Es verdadero o falso? :-) – Lobo

+0

Lo edité para intercambiarlos poco después de la publicación, así que sí, pero ya no. el retorno final debe ser cierto para un método llamado "isAllNulls" si no encuentra ningún nulo en el bucle – Bohemian

+0

¡Gracias! En realidad, este mismo proyecto que había planeado llevar a cabo para convertir todos los bucles "for" a la sintaxis de bucle "for each" que utilizaba anteriormente. – DMags

0

Se detección de no es sólo contiene valores null pero tal vez sea suficiente para usar solo contains(null) método en su lista.

0

que utilizo para hacer algo como esto:

// Simple loop to remove all 'null' from the list or a copy of the list 
while array.remove(null) { 
    array.remove(null); 
} 

if (CollectionUtils.isEmpty(array)) { 
    // the list contained only nulls 
} 
Cuestiones relacionadas