Ejemplos stream

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;
		}

	}
}

Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos