Introducción
En este laboratorio, aprenderás cómo verificar si una matriz (array) de Java contiene elementos nulos. Manejar valores nulos es una habilidad fundamental en la programación de Java para prevenir errores comunes como NullPointerException. Exploraremos tres métodos diferentes para lograr esto: iterar a través de la matriz utilizando un bucle, aprovechar el poder de la API Stream y contar el número de elementos nulos presentes en la matriz. Al final de este laboratorio, estarás equipado con técnicas prácticas para identificar y gestionar de manera efectiva los valores nulos dentro de tus matrices de Java.
Recorrer la matriz (array) para comprobar valores nulos
En este paso, aprenderemos cómo comprobar la presencia de valores null en una matriz (array) de Java recorriendo sus elementos. Manejar valores null es crucial en Java para prevenir NullPointerException, que son errores comunes.
Un valor null en Java significa que una variable no se refiere a ningún objeto. Cuando intentas acceder a un método o un campo de una variable que es null, se produce una NullPointerException, lo que hace que tu programa se bloquee.
Vamos a crear un sencillo programa de Java para demostrar cómo recorrer una matriz y comprobar la presencia de elementos null.
Abre el archivo
HelloJava.javaen el editor WebIDE. Si no lo tienes abierto, puedes encontrarlo en el Explorador de archivos a la izquierda, dentro de la carpetaproject.Reemplaza el código existente en
HelloJava.javacon el siguiente código:public class HelloJava { public static void main(String[] args) { String[] names = new String[5]; // Declare an array of Strings with size 5 names[0] = "Alice"; names[1] = "Bob"; names[2] = null; // Assign a null value names[3] = "Charlie"; names[4] = null; // Assign another null value System.out.println("Checking array for null values:"); // Loop through the array for (int i = 0; i < names.length; i++) { // Check if the current element is null if (names[i] == null) { System.out.println("Element at index " + i + " is null."); } else { System.out.println("Element at index " + i + " is: " + names[i]); } } } }Veamos las nuevas partes de este código:
String[] names = new String[5];: Esta línea declara una matriz llamadanamesque puede contener 5 objetosString. Cuando creas una matriz de objetos de esta manera, los elementos se inicializan automáticamente anull.names[2] = null;ynames[4] = null;: Estamos asignando explícitamentenulla los elementos en los índices 2 y 4.for (int i = 0; i < names.length; i++): Este es un bucleforestándar que recorre la matriz desde el primer elemento (índice 0) hasta el último elemento (names.length - 1).if (names[i] == null): Dentro del bucle, esta instrucciónifcomprueba si el elemento en el índice actualies igual anull.System.out.println("Element at index " + i + " is null.");: Si el elemento esnull, se ejecuta esta línea.System.out.println("Element at index " + i + " is: " + names[i]);: Si el elemento no esnull, se ejecuta esta línea, imprimiendo el valor del elemento.
Guarda el archivo
HelloJava.java(Ctrl+S o Cmd+S).Ahora, compila el programa modificado. Abre la Terminal en la parte inferior del WebIDE y ejecuta el siguiente comando:
javac HelloJava.javaSi no hay errores, la compilación es exitosa.
Finalmente, ejecuta el programa compilado:
java HelloJavaDeberías ver una salida similar a esta:
Checking array for null values: Element at index 0 is: Alice Element at index 1 is: Bob Element at index 2 is null. Element at index 3 is: Charlie Element at index 4 is null.Esta salida muestra que nuestro programa identificó y reportó con éxito los elementos
nullen la matriz.
En este paso, has aprendido cómo recorrer manualmente una matriz de Java y comprobar cada elemento en busca de un valor null utilizando una sencilla condición if. Esta es una técnica fundamental para manejar posibles NullPointerException.
Utilizar la API Stream para detectar valores nulos
En el paso anterior, utilizamos un bucle for tradicional para comprobar la presencia de valores null en una matriz (array). Java 8 introdujo la API Stream, que ofrece una forma más funcional y, a menudo, más concisa de procesar colecciones de datos, incluyendo matrices. En este paso, aprenderemos cómo utilizar la API Stream para detectar elementos null.
La API Stream te permite realizar operaciones en una secuencia de elementos de manera declarativa. Esto significa que describes qué quieres hacer, en lugar de cómo hacerlo (como con un bucle for).
Modifiquemos nuestro programa HelloJava.java para utilizar la API Stream para encontrar e imprimir los elementos null.
Abre el archivo
HelloJava.javaen el editor WebIDE.Reemplaza el código existente con el siguiente:
import java.util.Arrays; // Import the Arrays class import java.util.Objects; // Import the Objects class public class HelloJava { public static void main(String[] args) { String[] names = new String[5]; names[0] = "Alice"; names[1] = "Bob"; names[2] = null; names[3] = "Charlie"; names[4] = null; System.out.println("Checking array for null values using Stream API:"); // Convert the array to a Stream Arrays.stream(names) // Filter for null elements .filter(Objects::isNull) // Print each null element (or a message indicating null) .forEach(name -> System.out.println("Found a null element.")); } }Analicemos las nuevas partes:
import java.util.Arrays;: Necesitamos importar la claseArrayspara utilizar su métodostream().import java.util.Objects;: Importamos la claseObjectspara utilizar el métodoisNull(), que es una forma conveniente de comprobar si un objeto esnull.Arrays.stream(names): Esta línea convierte nuestra matriznamesen unStreamde objetosString..filter(Objects::isNull): Esta es una operación intermedia. Filtra el flujo, manteniendo solo los elementos para los cuales la condiciónObjects.isNull(element)es verdadera (es decir, los elementos que sonnull).Objects::isNulles una referencia a método, una forma abreviada de una expresión lambdaname -> Objects.isNull(name)..forEach(name -> System.out.println("Found a null element."));: Esta es una operación terminal. Realiza una acción para cada elemento que queda en el flujo (que son los elementosnulldespués de filtrar). En este caso, imprime "Found a null element." para cadanullencontrado.
Guarda el archivo
HelloJava.java.Compila el programa en la Terminal:
javac HelloJava.javaEjecuta el programa:
java HelloJavaDeberías ver una salida similar a esta:
Checking array for null values using Stream API: Found a null element. Found a null element.Esta salida confirma que la API Stream identificó con éxito los dos elementos
nullen la matriz. Utilizar flujos (streams) puede hacer que tu código sea más legible y expresivo para ciertas operaciones como filtrar y procesar colecciones.
Contar elementos nulos
En los pasos anteriores, aprendimos cómo identificar elementos null en una matriz (array) utilizando tanto un bucle for como la API Stream. A veces, en lugar de simplemente identificar los elementos null, es posible que necesites saber exactamente cuántos elementos null hay en una matriz. En este paso, aprenderemos cómo contar el número de elementos null utilizando la API Stream.
La API Stream proporciona un método conveniente llamado count() que, cuando se aplica a un flujo (stream), devuelve el número de elementos en ese flujo. Podemos combinar esto con la operación filter() que usamos antes para contar solo los elementos null.
Modifiquemos nuestro programa HelloJava.java una vez más para contar los elementos null e imprimir el recuento total.
Abre el archivo
HelloJava.javaen el editor WebIDE.Reemplaza el código existente con el siguiente:
import java.util.Arrays; import java.util.Objects; public class HelloJava { public static void main(String[] args) { String[] names = new String[5]; names[0] = "Alice"; names[1] = "Bob"; names[2] = null; names[3] = "Charlie"; names[4] = null; System.out.println("Counting null values using Stream API:"); // Convert the array to a Stream long nullCount = Arrays.stream(names) // Filter for null elements .filter(Objects::isNull) // Count the remaining elements (which are null) .count(); System.out.println("Total number of null elements: " + nullCount); } }Esto es lo nuevo:
long nullCount = ... .count();: Después de filtrar el flujo para incluir solo elementosnull, llamamos a la operación terminalcount(). Esta operación devuelve el número de elementos en el flujo filtrado como un valorlong, que almacenamos en la variablenullCount.System.out.println("Total number of null elements: " + nullCount);: Esta línea imprime el recuento final de elementosnull.
Guarda el archivo
HelloJava.java.Compila el programa en la Terminal:
javac HelloJava.javaEjecuta el programa:
java HelloJavaDeberías ver la siguiente salida:
Counting null values using Stream API: Total number of null elements: 2Esta salida muestra que nuestro programa contó correctamente los dos elementos
nullen la matriz. Utilizar juntos los métodosfilter()ycount()de la API Stream es una forma eficiente y legible de contar tipos específicos de elementos en una colección, incluyendo valoresnull.
Ahora has aprendido tres formas diferentes de manejar valores null en una matriz de Java: utilizando un bucle for tradicional para comprobar cada elemento, utilizando la API Stream para filtrar e identificar elementos null y utilizando la API Stream para filtrar y contar elementos null. Estas técnicas son fundamentales para escribir código Java robusto que evite NullPointerException.
Resumen
En este laboratorio (lab), aprendimos cómo comprobar la presencia de elementos nulos en una matriz (array) de Java utilizando diferentes enfoques. Comenzamos implementando un bucle tradicional para recorrer la matriz y comprobar explícitamente cada elemento en busca de un valor nulo utilizando una condición if. Este método ofrece una forma clara y fundamental de identificar valores nulos y es útil para comprender el concepto básico del manejo de valores nulos en matrices.
Luego exploramos técnicas más modernas y concisas para la detección de valores nulos. El laboratorio demostró cómo aprovechar la API Stream de Java para comprobar de manera eficiente la presencia de valores nulos. Este enfoque utiliza operaciones de flujo (stream) para procesar los elementos de la matriz y determinar la presencia de valores nulos de una manera más funcional. Finalmente, aprendimos cómo contar el número de elementos nulos dentro de una matriz, lo que proporciona una forma de cuantificar la extensión de los valores nulos presentes. Estos métodos ofrecen diferentes niveles de expresividad y eficiencia para manejar valores nulos en matrices de Java.



