Es CollectionUtils.isNotEmpty() mejor que una verificación null?

Muchos consejos para utilizar CollectionUtils.isNotEmpty(coll) en lugar de coll != null en el siguiente caso de uso también.

if (CollectionUtils.isNotEmpty(coll)) {
    for (String str : coll) {
    }
}

lugar de

if (coll != null) {
    for (String str : coll) {
    }
}

Hay ninguna razón de ventaja de utilizar CollectionUtils.isNotEmpty(coll) en lugar de otro? Gracias.

  • En este caso concreto, no. Pero a veces hay que hacer otras operaciones antes de que el bucle, como la preparación de las estructuras.
  • La cuestión acerca de null comprobaciones: stackoverflow.com/questions/271526
  • en este caso concreto sí hace una diferencia. El for (String str : coll) lanzará una NullPointerException si coll es null.
  • Hay una prueba para que. La pregunta es acerca de la diferencia entre las dos pruebas
  • esto no es un duplicado para «comprobar si la colección está vacía en java : Cual es el mejor método «
  • aah, lo siento. Estás en lo correcto.
  • la pregunta se vuelve a abrir, pero todavía pienso que las respuestas en here más o menos cubre esta pregunta.
  • esto es poco diferente. Estoy pidiendo a: es la primera llamada a CollectionUtils.isNotEmpty, a continuación, ir a por for bucle mejor que si nos limitamos a comprobar el valor null para ir a por for bucle … Como @manouti se indicó en la respuesta hay algunos. Aunque es muy muy pequeño…
  • -cinco de los votantes por favor, comentar, al menos, cuál es incorrecto.

InformationsquelleAutor Trying | 2015-06-05

4 Kommentare

  1. 6

    No hay ventajas reales aquí. Incluso si la hay, sería muy pequeño. Sólo evita que la creación de un Iterator y la ejecución de una rama de la instrucción, que es todo allí está a él.

    Esta pequeña ventaja se produce sólo cuando la colección está vacía. El siguiente bucle:

    for (String str : coll) {
       ...
    }

    es equivalente a:

    for (Iterator<String> iterator = col.iterator(); iterator.hasNext();) {
       String str = iterator.next();
       ...
    }

    Cuando la colección está vacía, el cheque en CollectionUtils.isNotEmpty(coll) impide que el bucle se ejecute. Por lo tanto, no Iterator se crea en la memoria y no llame a hasNext() se hace. Esto es a expensas de un O(1) llamada a coll.isEmpty().

    • Pero a pesar de que la ventaja es que hay uno. La correcta? podría pls explicar un poco más. Gracias.
    • Ver la edición de respuesta.
  2. 3

    Descompilar revela

    public static boolean isEmpty(Collection coll) {
        return coll == null || coll.isEmpty();
    }
  3. 1

    El problema es que la colección todavía puede estar vacío, cuando no nulo. Así que, en su caso depende de sus preferencias, lo que usted elija.

    • Que no cambia nada aquí.
  4. 0

    Como se explicó anteriormente depende, de lo que se quiere evaluar y cómo es la lógica de su construcción.

    Suponga que su ejemplo

    if (CollectionUtils.isNotEmpty(coll)) {
      for (String str : coll) {
         System.out.println("Branch 1. Collection is not empty.");
      }
    }
    else {
      System.out.println("Branch 2. Collection is empty.");
    }

    En este ejemplo, podemos ver, que siempre Branch1 o Branch2 se ejecuta.

    Si utilizamos null expresión, el resultado será diferente si coll no es nulo, pero vacío,

    if (coll != null) {
      for (String str : coll) {
         System.out.println("Branch1. Collection is not empty.");
      }
    }
    else {
      System.out.println("Branch2. Collection is empty.");
    }

    Si la colección coll no es nulo pero está vacía, ni Branch1 cualquiera de Branch2 se ejecuta, ya que la condición coll != null es cierto, pero en bucle for no hay ni una sola pasada.

    De curso, if expresión coll != null && coll.isNotEmpty() hacer el mismo trabajo que CollectionUtils.isNotEmpty(coll).

    Por lo tanto no es aconsejable la programación de manera que el uso de la prueba en null en el caso de las colecciones de coll != null sólo. Este es un caso de mal tratada condiciones extremas, que puede ser una fuente de resultado no deseado.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea