En el tutorial anterior aprendimos acerca de los cambios de interfaz en Java 8. En esta guía, discutiremos API de transmisión que es otra característica nueva de Java 8. Todas las clases e interfaces de esta API se encuentran en java.util.stream paquete. Usando flujos, podemos realizar varias operaciones de agregación en los datos devueltos por colecciones, matrices, operaciones de entrada / salida. Antes de ver cómo se puede usar la API de transmisión en Java, veamos un ejemplo para comprender el uso de las transmisiones.

Ejemplo de flujo de Java

Para entender cómo funciona la transmisión, tomemos un ejemplo sin usar transmisiones y luego veremos el mismo ejemplo con transmisiones.

Encuentra ciertas cadenas sin usar Stream

import java.util.ArrayList;
import java.util.List;
public class Example{ 
   public static void main(String[] args) {    
	List<String> names = new ArrayList<String>();
	names.add("Ajeet");
	names.add("Negan");
	names.add("Aditya");
	names.add("Steve");
	int count = 0;
	for (String str : names) {
	   if (str.length() < 6) 
		count++; 
	}
        System.out.println("There are "+count+" strings with length less than 6");
   }  
}

Producción:

There are 3 strings with length less than 6

Mismo ejemplo usando Stream

import java.util.ArrayList;
import java.util.List;
public class Example{ 
   public static void main(String[] args) {    
	List<String> names = new ArrayList<String>();
	names.add("Ajeet");
	names.add("Negan");
	names.add("Aditya");
	names.add("Steve");
		
	//Using Stream and Lambda expression
	long count = names.stream().filter(str->str.length()<6).count();
	System.out.println("There are "+count+" strings with length less than 6");

   }  
}

Producción:

There are 3 strings with length less than 6

¿Cuál es la diferencia entre estos códigos?

El resultado de ambos ejemplos es el mismo, sin embargo, hay una gran diferencia entre estos ejemplos cuando se considera el rendimiento del código.
En el primer ejemplo, estamos iterando toda la lista para encontrar cadenas de menos de 6. No hay paralelismo en este código.
En el segundo ejemplo, el método stream () devuelve una secuencia de todos los nombres, el método filter () devuelve otra secuencia de nombres de menos de 6 de longitud, el método count () reduce esta secuencia al resultado. Todas estas operaciones ocurren en paralelo, lo que significa que podemos paralelizar el código con la ayuda de flujos. La ejecución paralela de operaciones a través de flujos es más rápida que la ejecución secuencial sin usar flujos.

leer  Ejemplo de un comparador Lambda de Java 8 para ordenar una lista de objetos personalizados

Cómo trabajar con Stream en Java

Como vimos en el ejemplo anterior, el funcionamiento de la transmisión se puede explicar en tres pasos:
1. Crea una transmisión

2. Ejecutar operaciones intermedias en el flujo inicial para transformarlo en otro flujo y así sucesivamente para otras operaciones intermedias. En el ejemplo anterior, la operación filter () es una operación intermedia, puede haber múltiples operaciones intermedias.

3. Ejecutar operación terminal en la secuencia final para obtener el resultado. En el ejemplo anterior, la operación count () es una operación de terminal.

Funcionalidad Java Stream

1. Transmisión no almacena los elementos. simplemente realiza las operaciones agregadas (como filter () y count () que vimos en el ejemplo anterior) para obtener el flujo de datos deseado.

2. Las operaciones agregadas que realizamos en la colección, la matriz o cualquier otra fuente de datos. no cambies los datos de origen simplemente devuelven una nueva secuencia. Por ejemplo, el código que vimos anteriormente filtra cadenas de menos de 6 de longitud utilizando operaciones de flujo, pero no cambió los elementos de la lista.

3. Todas las operaciones de flujo son perezoso en la naturaleza, lo que significa que no se realizan hasta que se necesitan. Por ejemplo, si desea mostrar solo los primeros 2 elementos de una lista mediante la secuencia, la operación de la secuencia se detendrá al final de la segunda iteración después de mostrar el segundo elemento de la lista.

Veamos algunos ejemplos de Java Stream:

Ejemplo 1 de Java Stream: repetición y visualización de enteros seleccionados

import java.util.stream.*;  
public class Example {  
    public static void main(String[] args){  
        Stream.iterate(1, count->count+1)  
        .filter(number->number%3==0)  
        .limit(6)  
        .forEach(System.out::println);  
    }  
}

Producción:

3
6
9
12
15
18

Ejemplo 2 de secuencia de Java: concatenación de dos secuencias

import java.util.Arrays;
import java.util.List;
import java.util.stream.Stream;
public class Example {
   public static void main(String[] args) {
	//list 1
	List<String> alphabets = Arrays.asList("A","B","C");
	//list 2
	List<String> names = Arrays.asList("Sansa","Jon","Arya");
		
	//creating two streams from the two lists and concatenating them into one
	Stream<String> opstream = Stream.concat(alphabets.stream(), names.stream());
		
	//displaying the elements of the concatenated stream
	opstream.forEach(str->System.out.print(str+" "));
   }
}

Producción:

A B C Sansa Jon Arya

Artículos Relacionados:

  1. Ejemplo de Java Stream allMatch ()
  2. Ejemplo de noneMatch () de Java Stream
  3. Ejemplo de anyMatch () de Java Stream
leer  Interfaces funcionales de Java

Por avivcas

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *