Búsqueda en un array con Streams

07/Sep/2020 Java , , Deja un comentario
Programación en Java

En Java 8 aparecieron los Streams y las expresiones Lambda. Gracias a ellos podemos resolver una búsqueda en un Array con Streams. Lo primero será ver un poco por encima ¿qué son los Streams Java?

Por decirlo de una manera muy general podríamos indicar que mediante los Streams podemos ejecutar funciones de forma anidada, como si recorriésemos los elementos. En dichas funciones podremos ejecutar expresiones orientando nuestro modelo de programación a una programación funcional.

En el código vamos a implementar, como hemos hecho en otras ocasiones con la búsqueda de números, el método searchNumber() el cual recibe un array de números y el número a buscar.

private static boolean searchNumber(int[] numbers, int numberToSearch) { ... }

Así, lo primero será entender que el array será nuestro Stream en el código que realizará la búsqueda. Es decir, convertiremos el array en un Stream. Para ello utilizamos la clase InStream y el método of().

IntStream.of(numbers);

Una vez que hemos convertido el array en un Stream lo que vamos a utilizar es utilizar un método de matching sobre los elementos. Es decir, que los vamos a recorrer y vamos a ver cuál de los elementos, si aplica, coincide con el número que estamos buscando. El método en concreto que utilizaremos será el método .anyMatch(). Este método ejecuta una comparación y en el caso de que la comparación sea correcta devuelve un valor true y si no devuelve un valor false.

IntStream.of(numbers).contains();

El parámetro que se le pasa al método .anyMatch() es un Predicado representado por la clase Predicate. El Predicado es una expresión Lambda que tiene la forma:

parámetro -> cuerpo-lambda

Donde el parámetro corresponde al elemento de Stream que estamos recorriendo y el cuerpo-lambda a la expresión que queremos ejecutar. De esta forma nuestro predicado será el siguiente:

elemento -> elemento == numberToSearch

Nuestro código del Stream más la expresión Lambda quedará de la siguiente manera:

private static boolean searchNumber(int[] numbers, int numberToSearch) {
  return IntStream.of(numbers).anyMatch(x -> x == numberToSearch);
}

Ya solo nos quedará la parte más sencilla del código que es la de definir el array y el número:

int[] numeros = {12,45,67,27,89,84,65,21,44};
int numberToSearch = 27;

Y la de invocar al método searchNumber().

if (searchNumber(numeros,numberToSearch))
  System.out.println("El número " + numberToSearch + " está en la lista");
else
  System.out.println("El número " + numberToSearch + " NO está en la lista");

Con esto ya hemos aprendido algo más a utilizar los Streams y las expresiones Lambda de Java y a poder realizar una búsqueda en un array con Streams.

Vídeos sobre Java


¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.