logo

Corriente Java 8

Java proporciona un nuevo paquete adicional en Java 8 llamado java.util.stream. Este paquete consta de clases, interfaces y enumeraciones que permiten operaciones de estilo funcional en los elementos. Puede utilizar Stream importando el paquete java.util.stream.


Stream proporciona las siguientes características:

  • Stream no almacena elementos. Simplemente transmite elementos de una fuente, como una estructura de datos, una matriz o un canal de E/S, a través de una canalización de operaciones computacionales.
  • Stream es de naturaleza funcional. Las operaciones realizadas en una secuencia no modifican su fuente. Por ejemplo, filtrar una secuencia obtenida de una colección produce una nueva secuencia sin los elementos filtrados, en lugar de eliminar elementos de la colección de origen.
  • Stream es vago y evalúa el código solo cuando es necesario.
  • Los elementos de un arroyo sólo se visitan una vez durante la vida de un arroyo. Al igual que un iterador, se debe generar una nueva secuencia para volver a visitar los mismos elementos de la fuente.

Puede utilizar Stream para filtrar, recopilar, imprimir y convertir de una estructura de datos a otra, etc. En los siguientes ejemplos, hemos aplicado varias operaciones con la ayuda de Stream.

Métodos de interfaz de flujo de Java

Métodos Descripción
booleano allMatch (predicado predicado) Devuelve todos los elementos de esta secuencia que coinciden con el predicado proporcionado. Si la secuencia está vacía, se devuelve verdadero y el predicado no se evalúa.
booleano anyMatch (predicado predicado) Devuelve cualquier elemento de esta secuencia que coincida con el predicado proporcionado. Si la secuencia está vacía, se devuelve falso y el predicado no se evalúa.
constructor estático Stream.Builder() Devuelve un constructor para un Stream.
R recoger(Coleccionista coleccionista) Realiza una operación de reducción mutable en los elementos de esta secuencia utilizando un Colector. Un recopilador encapsula las funciones utilizadas como argumentos para recopilar (Proveedor, BiConsumer, BiConsumer), lo que permite la reutilización de estrategias de recopilación y la composición de operaciones de recopilación, como agrupación o partición de múltiples niveles.
R recoger (proveedor proveedor, acumulador BiConsumer, combinador BiConsumer) Realiza una operación de reducción mutable sobre los elementos de esta corriente. Una reducción mutable es aquella en la que el valor reducido es un contenedor de resultados mutable, como ArrayList, y los elementos se incorporan actualizando el estado del resultado en lugar de reemplazarlo.
Concat de flujo estático (flujo a, flujo b) Crea una secuencia concatenada de forma perezosa cuyos elementos son todos los elementos de la primera secuencia seguidos de todos los elementos de la segunda secuencia. El flujo resultante es ordenado si ambos flujos de entrada están ordenados y paralelo si alguno de los flujos de entrada es paralelo. Cuando se cierra el flujo resultante, se invocan los controladores de cierre para ambos flujos de entrada.
cuenta larga() Devuelve el recuento de elementos en esta secuencia. Éste es un caso especial de reducción.
Corriente distinta() Devuelve una secuencia que consta de los distintos elementos (según Object.equals(Object)) de esta secuencia.
Flujo estático vacío() Devuelve un Stream secuencial vacío.
Filtro de flujo (predicado predicado) Devuelve una secuencia que consta de los elementos de esta secuencia que coinciden con el predicado dado.
Opcional buscarCualquiera() Devuelve un Opcional que describe algún elemento de la secuencia, o un Opcional vacío si la secuencia está vacía.
Opcional buscarPrimero() Devuelve un Opcional que describe el primer elemento de esta secuencia, o un Opcional vacío si la secuencia está vacía. Si la secuencia no tiene orden de encuentro, se puede devolver cualquier elemento.
Transmitir flatMap(Funciónmapeador) Devuelve una secuencia que consta de los resultados de reemplazar cada elemento de esta secuencia con el contenido de una secuencia mapeada producida al aplicar la función de mapeo proporcionada a cada elemento. Cada secuencia asignada se cierra después de que su contenido se haya colocado en esta secuencia. (Si una secuencia asignada es nula, en su lugar se utiliza una secuencia vacía).
DoubleStream flatMapToDouble (asignador de funciones) Devuelve un DoubleStream que consta de los resultados de reemplazar cada elemento de este flujo con el contenido de un flujo mapeado producido al aplicar la función de mapeo proporcionada a cada elemento. Cada secuencia asignada se cierra después de que su contenido se haya colocado en esta secuencia. (Si una secuencia asignada es nula, en su lugar se utiliza una secuencia vacía).
IntStream flatMapToInt (asignador de funciones) Devuelve un IntStream que consta de los resultados de reemplazar cada elemento de este flujo con el contenido de un flujo mapeado producido al aplicar la función de mapeo proporcionada a cada elemento. Cada secuencia asignada se cierra después de que su contenido se haya colocado en esta secuencia. (Si una secuencia asignada es nula, en su lugar se utiliza una secuencia vacía).
LongStream flatMapToLong (asignador de funciones) Devuelve un LongStream que consta de los resultados de reemplazar cada elemento de este flujo con el contenido de un flujo mapeado producido al aplicar la función de mapeo proporcionada a cada elemento. Cada secuencia asignada se cierra después de que su contenido se haya colocado en esta secuencia. (Si una secuencia asignada es nula, en su lugar se utiliza una secuencia vacía).
anular para cada uno (acción del consumidor) Realiza una acción para cada elemento de esta secuencia.
anular para cada pedido (acción del consumidor) Realiza una acción para cada elemento de esta secuencia, en el orden de encuentro de la secuencia si la secuencia tiene un orden de encuentro definido.
Generación de flujo estático (proveedores) Devuelve un flujo secuencial infinito y desordenado donde cada elemento es generado por el proveedor proporcionado. Esto es adecuado para generar flujos constantes, flujos de elementos aleatorios, etc.
Iteración de flujo estático (T semilla, UnaryOperator f) Devuelve un Stream ordenado secuencial infinito producido por la aplicación iterativa de una función f a un elemento inicial semilla, produciendo un Stream que consta de semilla, f(seed), f(f(seed)), etc.
Límite de transmisión (tamaño máximo largo) Devuelve una secuencia que consta de los elementos de esta secuencia, truncada para que no tenga una longitud superior a maxSize.
Mapa de flujo (mapeador de funciones) Devuelve una secuencia que consta de los resultados de aplicar la función dada a los elementos de esta secuencia.
DoubleStream mapToDouble(Asignador ToDoubleFunction) Devuelve un DoubleStream que consta de los resultados de aplicar la función dada a los elementos de este flujo.
IntStream mapToInt(Asignador ToIntFunction) Devuelve un IntStream que consta de los resultados de aplicar la función dada a los elementos de este flujo.
LongStream mapToLong (asignador ToLongFunction) Devuelve un LongStream que consta de los resultados de aplicar la función dada a los elementos de este flujo.
Max opcional (comparador comparador) Devuelve el elemento máximo de esta secuencia según el Comparador proporcionado. Este es un caso especial de reducción.
Min opcional (comparador comparador) Devuelve el elemento mínimo de esta secuencia según el Comparador proporcionado. Este es un caso especial de reducción.
booleano noneMatch (predicado predicado) Devuelve elementos de esta secuencia que coinciden con el predicado proporcionado. Si la secuencia está vacía, se devuelve verdadero y el predicado no se evalúa.
@SafeVarargs Flujo estático de (T... valores) Devuelve una secuencia ordenada secuencial cuyos elementos son los valores especificados.
Corriente estática de (T t) Devuelve un Stream secuencial que contiene un solo elemento.
Vistazo de la transmisión (acción del consumidor) Devuelve una secuencia que consta de los elementos de esta secuencia y, además, realiza la acción proporcionada en cada elemento a medida que los elementos se consumen de la secuencia resultante.
Reducción opcional (acumulador BinaryOperator) Realiza una reducción de los elementos de esta secuencia, utilizando una función de acumulación asociativa, y devuelve un Opcional que describe el valor reducido, si lo hay.
T reducir (identidad T, acumulador BinaryOperator) Realiza una reducción de los elementos de esta secuencia, utilizando el valor de identidad proporcionado y una función de acumulación asociativa, y devuelve el valor reducido.
U reduce (identidad U, acumulador BiFunction, combinador BinaryOperator) Realiza una reducción de los elementos de esta corriente, utilizando las funciones de identidad, acumulación y combinación proporcionadas.
Salto de secuencia (n larga) Devuelve una secuencia que consta de los elementos restantes de esta secuencia después de descartar los primeros n elementos de la secuencia. Si esta secuencia contiene menos de n elementos, se devolverá una secuencia vacía.
Corriente ordenada() Devuelve una secuencia que consta de los elementos de esta secuencia, ordenados según el orden natural. Si los elementos de esta secuencia no son comparables, se puede generar una java.lang.ClassCastException cuando se ejecuta la operación del terminal.
Flujo ordenado (comparador comparador) Devuelve una secuencia que consta de los elementos de esta secuencia, ordenados según el Comparador proporcionado.
Objeto[] toArray() Devuelve una matriz que contiene los elementos de esta secuencia.
A[] toArray(generador de funciones Int) Devuelve una matriz que contiene los elementos de esta secuencia, utilizando la función generadora proporcionada para asignar la matriz devuelta, así como cualquier matriz adicional que pueda ser necesaria para una ejecución particionada o para cambiar el tamaño.

Ejemplo de Java: filtrado de colección sin utilizar Stream

En el siguiente ejemplo, filtramos datos sin utilizar stream. Este enfoque lo utilizamos antes de que se lanzara el paquete stream.

matriz java de cadena
 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList = new ArrayList(); for(Product product: productsList){ // filtering data of list if(product.price<30000){ productpricelist.add(product.price); adding price to a productpricelist } system.out.println(productpricelist); displaying data < pre> <p> <strong>Output:</strong> </p> <pre> [25000.0, 28000.0, 28000.0] </pre> <hr> <h3>Java Stream Example: Filtering Collection by using Stream</h3> <p>Here, we are filtering data by using stream. You can see that code is optimized and maintained. Stream provides fast execution.</p> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList2 =productsList.stream() .filter(p -&gt; p.price &gt; 30000)// filtering data .map(p-&gt;p.price) // fetching price .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList2); } } </pre> <p> <strong>Output:</strong> </p> <pre> [90000.0] </pre> <hr> <h3>Java Stream Iterating Example</h3> <p>You can use stream to iterate any number of times. Stream provides predefined methods to deal with the logic you implement. In the following example, we are iterating, filtering and passed a limit to fix the iteration.</p> <pre> import java.util.stream.*; public class JavaStreamExample { public static void main(String[] args){ Stream.iterate(1, element-&gt;element+1) .filter(element-&gt;element%5==0) .limit(5) .forEach(System.out::println); } } </pre> <p> <strong>Output:</strong> </p> <pre> 5 10 15 20 25 </pre> <hr> <h3>Java Stream Example: Filtering and Iterating Collection</h3> <p>In the following example, we are using filter() method. Here, you can see code is optimized and very concise.</p> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data productsList.stream() .filter(product -&gt; product.price == 30000) .forEach(product -&gt; System.out.println(product.name)); } } </pre> <p> <strong>Output:</strong> </p> <pre> Dell Laptop </pre> <hr> <h3>Java Stream Example : reduce() Method in Collection</h3> <p>This method takes a sequence of input elements and combines them into a single summary result by repeated operation. For example, finding the sum of numbers, or accumulating elements into a list. </p> <p>In the following example, we are using reduce() method, which is used to sum of all the product prices.</p> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data Float totalPrice = productsList.stream() .map(product-&gt;product.price) .reduce(0.0f,(sum, price)-&gt;sum+price); // accumulating price System.out.println(totalPrice); // More precise code float totalPrice2 = productsList.stream() .map(product-&gt;product.price) .reduce(0.0f,Float::sum); // accumulating price, by referring method of Float class System.out.println(totalPrice2); } } </pre> <p> <strong>Output:</strong> </p> <pre> 201000.0 201000.0 </pre> <hr> <h3>Java Stream Example: Sum by using Collectors Methods</h3> <p>We can also use collectors to compute sum of numeric values. In the following example, we are using Collectors class and it?s specified methods to compute sum of all the product prices.</p> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Using Collectors&apos;s method to sum the prices. double totalPrice3 = productsList.stream() .collect(Collectors.summingDouble(product-&gt;product.price)); System.out.println(totalPrice3); } } </pre> <p> <strong>Output:</strong> </p> <pre> 201000.0 </pre> <hr> <h3>Java Stream Example: Find Max and Min Product Price</h3> <p>Following example finds min and max product price by using stream. It provides convenient way to find values without using imperative approach.</p> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // max() method to get max Product price Product productA = productsList.stream().max((product1, product2)-&gt;product1.price &gt; product2.price ? 1: -1).get(); System.out.println(productA.price); // min() method to get min Product price Product productB = productsList.stream().min((product1, product2)-&gt;product1.price &gt; product2.price ? 1: -1).get(); System.out.println(productB.price); } } </pre> <p> <strong>Output:</strong> </p> <pre> 90000.0 25000.0 </pre> <hr> <h3>Java Stream Example: count() Method in Collection</h3> <pre> import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // count number of products based on the filter long count = productsList.stream() .filter(product-&gt;product.price<30000) .count(); system.out.println(count); } < pre> <p> <strong>Output:</strong> </p> <pre> 3 </pre> <p>stream allows you to collect your result in any various forms. You can get you result as set, list or map and can perform manipulation on the elements.</p> <hr> <h3>Java Stream Example : Convert List into Set</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product-&gt;product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [25000.0, 28000.0] </pre> <hr> <h3>Java Stream Example : Convert List into Map</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p-&gt;p.id, p-&gt;p.name)); System.out.println(productPriceMap); } } </pre> <p> <strong>Output:</strong> </p> <pre> {1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop} </pre> <hr> <h3>Method Reference in stream</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public String getName() { return name; } public float getPrice() { return price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList = productsList.stream() .filter(p -&gt; p.price &gt; 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [90000.0] </pre> <hr></30000)></pre></30000){>

Ejemplo de Java Stream: filtrado de colección mediante Stream

Aquí, estamos filtrando datos mediante el uso de flujo. Puede ver que el código está optimizado y mantenido. Stream proporciona una ejecución rápida.

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList2 =productsList.stream() .filter(p -&gt; p.price &gt; 30000)// filtering data .map(p-&gt;p.price) // fetching price .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList2); } } 

Producción:

 [90000.0] 

Ejemplo de iteración de flujo de Java

Puedes usar stream para iterar cualquier cantidad de veces. Stream proporciona métodos predefinidos para lidiar con la lógica que implementa. En el siguiente ejemplo, estamos iterando, filtrando y pasando un límite para corregir la iteración.

 import java.util.stream.*; public class JavaStreamExample { public static void main(String[] args){ Stream.iterate(1, element-&gt;element+1) .filter(element-&gt;element%5==0) .limit(5) .forEach(System.out::println); } } 

Producción:

 5 10 15 20 25 

Ejemplo de secuencia de Java: colección de filtrado e iteración

En el siguiente ejemplo, utilizamos el método filter(). Aquí puede ver que el código está optimizado y es muy conciso.

 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data productsList.stream() .filter(product -&gt; product.price == 30000) .forEach(product -&gt; System.out.println(product.name)); } } 

Producción:

 Dell Laptop 

Ejemplo de secuencia de Java: método reduce() en la colección

Este método toma una secuencia de elementos de entrada y los combina en un único resultado resumido mediante operaciones repetidas. Por ejemplo, encontrar la suma de números o acumular elementos en una lista.

En el siguiente ejemplo, utilizamos el método reduce(), que se utiliza para sumar todos los precios de los productos.

 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // This is more compact approach for filtering data Float totalPrice = productsList.stream() .map(product-&gt;product.price) .reduce(0.0f,(sum, price)-&gt;sum+price); // accumulating price System.out.println(totalPrice); // More precise code float totalPrice2 = productsList.stream() .map(product-&gt;product.price) .reduce(0.0f,Float::sum); // accumulating price, by referring method of Float class System.out.println(totalPrice2); } } 

Producción:

 201000.0 201000.0 

Ejemplo de secuencia de Java: suma mediante métodos de recopiladores

También podemos utilizar recopiladores para calcular la suma de valores numéricos. En el siguiente ejemplo, utilizamos la clase Collectors y sus métodos especificados para calcular la suma de todos los precios de los productos.

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Using Collectors&apos;s method to sum the prices. double totalPrice3 = productsList.stream() .collect(Collectors.summingDouble(product-&gt;product.price)); System.out.println(totalPrice3); } } 

Producción:

 201000.0 

Ejemplo de secuencia de Java: encontrar el precio máximo y mínimo del producto

El siguiente ejemplo encuentra el precio mínimo y máximo del producto mediante el uso de stream. Proporciona una manera conveniente de encontrar valores sin utilizar un enfoque imperativo.

 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // max() method to get max Product price Product productA = productsList.stream().max((product1, product2)-&gt;product1.price &gt; product2.price ? 1: -1).get(); System.out.println(productA.price); // min() method to get min Product price Product productB = productsList.stream().min((product1, product2)-&gt;product1.price &gt; product2.price ? 1: -1).get(); System.out.println(productB.price); } } 

Producción:

 90000.0 25000.0 

Ejemplo de secuencia de Java: método count() en la colección

 import java.util.*; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // count number of products based on the filter long count = productsList.stream() .filter(product-&gt;product.price<30000) .count(); system.out.println(count); } < pre> <p> <strong>Output:</strong> </p> <pre> 3 </pre> <p>stream allows you to collect your result in any various forms. You can get you result as set, list or map and can perform manipulation on the elements.</p> <hr> <h3>Java Stream Example : Convert List into Set</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product-&gt;product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [25000.0, 28000.0] </pre> <hr> <h3>Java Stream Example : Convert List into Map</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p-&gt;p.id, p-&gt;p.name)); System.out.println(productPriceMap); } } </pre> <p> <strong>Output:</strong> </p> <pre> {1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop} </pre> <hr> <h3>Method Reference in stream</h3> <pre> import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public String getName() { return name; } public float getPrice() { return price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList = productsList.stream() .filter(p -&gt; p.price &gt; 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } } </pre> <p> <strong>Output:</strong> </p> <pre> [90000.0] </pre> <hr></30000)>

stream le permite recopilar su resultado en varias formas. Puede obtener su resultado como conjunto, lista o mapa y puede realizar manipulaciones en los elementos.


Ejemplo de secuencia de Java: convertir lista en conjunto

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting product List into Set Set productPriceList = productsList.stream() .filter(product-&gt;product.price product.price) .collect(Collectors.toSet()); // collect it as Set(remove duplicate elements) System.out.println(productPriceList); } } 

Producción:

 [25000.0, 28000.0] 

Ejemplo de secuencia de Java: convertir lista en mapa

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); // Converting Product List into a Map Map productPriceMap = productsList.stream() .collect(Collectors.toMap(p-&gt;p.id, p-&gt;p.name)); System.out.println(productPriceMap); } } 

Producción:

 {1=HP Laptop, 2=Dell Laptop, 3=Lenevo Laptop, 4=Sony Laptop, 5=Apple Laptop} 

Referencia del método en la secuencia

 import java.util.*; import java.util.stream.Collectors; class Product{ int id; String name; float price; public Product(int id, String name, float price) { this.id = id; this.name = name; this.price = price; } public int getId() { return id; } public String getName() { return name; } public float getPrice() { return price; } } public class JavaStreamExample { public static void main(String[] args) { List productsList = new ArrayList(); //Adding Products productsList.add(new Product(1,&apos;HP Laptop&apos;,25000f)); productsList.add(new Product(2,&apos;Dell Laptop&apos;,30000f)); productsList.add(new Product(3,&apos;Lenevo Laptop&apos;,28000f)); productsList.add(new Product(4,&apos;Sony Laptop&apos;,28000f)); productsList.add(new Product(5,&apos;Apple Laptop&apos;,90000f)); List productPriceList = productsList.stream() .filter(p -&gt; p.price &gt; 30000) // filtering data .map(Product::getPrice) // fetching price by referring getPrice method .collect(Collectors.toList()); // collecting as list System.out.println(productPriceList); } } 

Producción:

 [90000.0]