package com.trifulcas.arrays; import java.util.Arrays; import java.util.stream.IntStream; public class EjemplosStreams { public static void main(String[] args) { int[] numeros = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; // Creo un stream a partir de un array IntStream miStream = Arrays.stream(numeros); // Puedo utilizar los métodos que tiene stream. Vemos ejemplos // foreach nos permite iterar sobre cada elemento // Utilizo una función lambda (en JS eran flechas, se parecen mucho) // Sintaxis del lambda: parametro->valor que retorno o código miStream.forEach(x -> System.out.println(x)); // Otra manera miStream = Arrays.stream(numeros); // Indico directamente cual es la función que se va a aplicar a los elementos del array miStream.forEach(System.out::println); miStream = Arrays.stream(numeros); // Puedo filtrar los elementos. En el filter se pide un predicado IntStream pares = miStream.filter(x -> x % 2 == 0); pares.forEach(x -> System.out.println(x)); // Si combino filter con count lo que tengo es una manera muy sencilla // De averiguar cuantos elementos en un array cumplen una condición // Por ejemplo, cuantos pares tengo en un array long nPares = Arrays.stream(numeros).filter(x -> x % 2 == 0).count(); System.out.println(nPares); // Tenemos map que nos aplica una transformación a los elementos del stream String[] words = { "Java", "Python", "C++", "JavaScript" }; // Puedo llamar directamente ala función que quiero aplicar Arrays.stream(words).map(String::toUpperCase).forEach(System.out::println); // Puedo utilizar una función lambda Arrays.stream(words).map(s -> s.toUpperCase()).forEach(System.out::println); // Usar una lambda Arrays.stream(numeros).map(x -> doble(x)).forEach(System.out::println); // Usar la función que tengo definida en mi propia clase Arrays.stream(numeros).map(EjemplosStreams::doble).forEach(System.out::println); // reduce para hacer operaciones sobre los elementos del stream // El ejemplo más común es la suma. Inicializo a cero y después sumo int sum = Arrays.stream(numeros).reduce(0, (x, y) -> x + y); System.out.println(sum); // La opción de máximo y mínimo. Uso getAsInt porque el tipo que devuelve // es un OptionalInt int max = Arrays.stream(numeros).max().getAsInt(); int min = Arrays.stream(numeros).min().getAsInt(); System.out.println("Máximo: " + max + ", Mínimo: " + min); } static int doble(int n) { return n * 2; } static int parityNumber(int[] nums) { long even = Arrays.stream(nums).filter(x -> x % 2 == 0).count(); long odd = nums.length - even; if (even == odd) { return 0; } else if (even > odd) { return 2; } else { return 1; } } }