Streams
El método Arrays.stream() en Java es un método de utilidad que convierte un array en un stream (flujo) de datos. Los streams son una característica nueva en Java 8 que proporciona una forma eficiente y concisa de procesar datos. Los streams no almacenan los datos, sino que proporcionan una interfaz para procesar los datos de forma declarativa.
El método Arrays.stream() toma un array como argumento y devuelve un stream que contiene los elementos del array. Una vez que se tiene un stream, se pueden aplicar diferentes operaciones para procesar los datos, como filtrado, transformación y reducción.
Ejemplo:
int[] numbers = {1, 2, 3, 4, 5};
Arrays.stream(numbers)
.filter(x -> x % 2 == 0)
.forEach(x -> System.out.print(x + " "));
//output: 2 4
En este ejemplo, Arrays.stream(numbers) crea un stream de números, luego se utiliza el método filter() para filtrar solo los números pares y se utiliza forEach() para imprimirlos.
En resumen, el método Arrays.stream() es una forma de procesar los datos de un array de forma eficiente y concisa, utilizando las funcionalidades de los streams de Java 8.
Aquí hay algunos ejemplos de los principales métodos de stream en Java:
filter: Este método toma una expresión lambda que especifica una condición, y devuelve un stream con solo los elementos que cumplen esa condición. Ejemplo:
int[] numbers = {1, 2, 3, 4, 5};
Arrays.stream(numbers)
.filter(x -> x % 2 == 0)
.forEach(x -> System.out.print(x + " "));
//output: 2 4
map: Este método toma una expresión lambda que especifica una transformación, y devuelve un stream con los elementos transformados. Ejemplo:
String[] words = {"Java", "Python", "C++", "JavaScript"};
Arrays.stream(words)
.map(String::toUpperCase)
.forEach(System.out::println);
//output: JAVA PYTHON C++ JAVASCRIPT
forEach: Este método toma una expresión lambda que especifica una acción, y aplica esa acción a cada elemento del stream. Ejemplo:
int[] numbers = {1, 2, 3, 4, 5};
Arrays.stream(numbers)
.forEach(x -> System.out.print(x + " "));
//output: 1 2 3 4 5
reduce: Este método toma una expresión lambda que especifica cómo combinar los elementos del stream, y devuelve un valor acumulado. Ejemplo:
int[] numbers = {1, 2, 3, 4, 5};
int sum = Arrays.stream(numbers)
.reduce(0, (x, y) -> x + y);
System.out.println("Suma: " + sum); // imprime "Suma: 15"
min y max: Este método devuelve el elemento mínimo o máximo del stream. Ejemplo:
int[] numbers = {3, 7, 1, 9, 4};
int max = Arrays.stream(numbers).max().getAsInt();
int min = Arrays.stream(numbers).min().getAsInt();
System.out.println("Máximo: " + max + ", Mínimo: " + min); // imprime "Máximo: 9, Mínimo: 1"
count: Este método devuelve el número de elementos en el stream. Ejemplo:
“`
String[] words = {"Java", "Python", "C++", "JavaScript"};
long count = Arrays.stream(words).count();
System.out.println("Número de palabras: " + count); // imprime "Número de palabras: 4"