Trabajando con Java 8 IntStream y sus métodos

El concepto de Java 8 IntStream hace referencia a Streams compuestos por números enteros. Es algo que en muchas ocasiones puede sernos util a la hora de trabajar ya que aporta algunos métodos interesantes, vamos a verlos:


package com.arquitecturajava;

import java.util.stream.IntStream;

public class Principal {

	public static void main(String[] args) {
		
		
		IntStream it= IntStream.of(1,2,3,4,5,6);
		it.forEach(System.out::println);
		
	}
}

Nuestro primer ejemplo crea un Stream de seis números y lo imprime por pantalla. Podemos hacer lo mismo de una forma más compacta usando el método range() e imprimir una lista de 100 números por ejemplo:

 


package com.arquitecturajava;

import java.util.stream.IntStream;

public class Principal2 {

public static void main(String[] args) {
 
 
 IntStream it= IntStream.range(0, 100);
 it.forEach(System.out::println);

}

}


Java 8 IntStream Lista

De esta forma es muy sencillo realizar cálculos sobre la suma de n términos, bastaría con modificar el código e invocar al método sum():


 System.out.println(IntStream.range(0, 100).sum());

El resultado imprimirá :

Java 8 IntStream Suma

 

Usando IntStream

El código es mucho más compacto que usar el clásico bucle for. A veces se nos olvida que los IntStreams pueden simplificar sobre manera operaciones cotidianas. Supongamos que tenemos un array de cadenas y queremos obtener la media de la longitud de todas las cadenas . Se trata de un programa sencillo de implementar en Java clásico:


package com.arquitecturajava;

public class Principal4 {

	public static void main(String[] args) {
		
		
		String[] cadenas= {"hello","my","name", "is","cecilio"};
		
		double total=0;
		double media=0;
		
		for (int i=0;i<cadenas.length;i++) {
			
			total+=cadenas[i].length();
		}
		
		media=total/cadenas.length;
		System.out.println(media);
		

	}

}


El resultado por consola sera:

El código es muy muy sencillo de entender pero son bastantes lineas. ¿ Podríamos haber usado Streams numéricos para simplificarlo? . La respuesta es SI y el código queda mucho más elegante.


package com.arquitecturajava;

import java.util.Arrays;

public class Principal5 {

	public static void main(String[] args) {

		String[] cadenas = { "hello", "my", "name", "is", "cecilio" };

		System.out.println(Arrays.stream(cadenas).mapToInt(String::length).average().getAsDouble());

	}
}

El resultado será idéntico.

Hemos realizado varias operaciones.

  1.  Hemos convertido el array en un stream
  2. Hemos mapeado la propiedad length para convertir el Stream en un Stream de números.
  3.  Después hemos invocado la propiedad average para calcular la media
  4.  Finalmente  se usa el método get para obtener un resultado.

Java 8 IntStream WorkFlow

Acabamos de usar Java 8 para reducir un bucle for y una serie de transformaciones a una única linea.

Otros artículos relacionados : Java Streams ,Java 8 Lambda Expressions (I) ,Java Reference methods

 

It's only fair to share...Share on FacebookShare on Google+Tweet about this on TwitterShare on LinkedIn

About Cecilio Álvarez Caules

Cecilio Álvarez Caules Sun Certified Enterprise Architech (J2EE/JEE).

4 Responses to Trabajando con Java 8 IntStream y sus métodos

  1. oscar_v 26 Febrero, 2017 at 18:31 #

    Buen ejemplo Cecicilio. Siempre se aprenden cosas en tu blog.

    Muchas gracias!

    • Cecilio Álvarez Caules 1 Marzo, 2017 at 20:34 #

      gracias , me alegro que te sea util 🙂

  2. Daloz 21 Marzo, 2017 at 0:21 #

    Gracias por tus ejemplos cecilio 🙂

    Una duda, soy novato en java aun, los parametros se envia por valor o referencia en java? 🙂

    Saludos.

    • Cecilio Álvarez Caules 21 Marzo, 2017 at 17:31 #

      Es una buena pregunta a ver si escribo algo sobre ella ,gracias por el aporte . En principio si son tipos básicos es por valor, si son objetos es como por referencia

Deja un comentario