Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Recuperación de Elementos de un Flujo con findFirst() y findAny() | Operaciones Terminales en la Stream API
Stream API

bookRecuperación de Elementos de un Flujo con findFirst() y findAny()

En la Stream API, también es posible extraer solo un elemento coincidente de todo el stream.

Por ejemplo, en una tienda en línea, se puede buscar el primer producto con descuento o cualquier artículo en stock. En estos casos, los métodos findFirst y findAny son útiles porque permiten extraer rápidamente un elemento de un flujo de datos.

El método findFirst()

El método findFirst() se utiliza para obtener el primer elemento de un stream. Esto resulta especialmente útil cuando el orden de los elementos es relevante, como al trabajar con un stream ordenado.

Optional<T> findFirst();

Este método devuelve un Optional<T>, lo que significa que el elemento puede o no ser encontrado.

Ejemplo de uso

En una tienda en línea, es necesario encontrar el primer producto con descuento e imprimir su nombre:

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728293031323334353637383940
package com.example; import java.util.List; import java.util.Optional; import java.util.Arrays; public class Main { public static void main(String[] args) { List<Product> products = Arrays.asList( new Product("Laptop", false), new Product("Smartphone", true), new Product("Tablet", true) ); Optional<Product> discountedProduct = products.parallelStream() .filter(Product::hasDiscount) .findFirst(); discountedProduct.ifPresent(product -> System.out.println("Discounted product: " + product.getName())); } } class Product { private String name; private boolean discount; public Product(String name, boolean discount) { this.name = name; this.discount = discount; } public boolean hasDiscount() { return discount; } public String getName() { return name; } }

El código crea una lista de objetos Product, cada uno con un campo discount. El método filter(Product::hasDiscount) selecciona solo los productos con descuento, y findFirst() recupera el primero. Si se encuentra un producto, se imprime su nombre.

El método findAny()

El método findAny() recupera cualquier elemento de un stream. Es especialmente útil en el procesamiento paralelo ya que puede devolver el primer elemento disponible, lo que lo hace más rápido que findFirst() en algunos casos.

Optional<T> findAny();

Al igual que findFirst(), este método devuelve un Optional<T>, lo que ayuda a evitar problemas con null.

Ejemplo de uso

Busquemos cualquier producto disponible e imprimamos su nombre:

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233343536373839404142
package com.example; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.stream.Stream; public class Main { public static void main(String[] args) { List<Product> products = Arrays.asList( new Product("Laptop", false), new Product("Smartphone", true), new Product("Tablet", true) ); Optional<Product> availableProduct = products.parallelStream() .filter(Product::hasDiscount) .findAny(); availableProduct.ifPresent(product -> System.out.println("Product found: " + product.getName())); } } class Product { private String name; private boolean discount; public Product(String name, boolean discount) { this.name = name; this.discount = discount; } public boolean hasDiscount() { return discount; } public String getName() { return name; } }

Este código crea una lista de products que contiene objetos Product con un campo discount. El método filter(Product::hasDiscount) filtra solo los productos con descuento, y findAny() selecciona uno aleatorio. Si se encuentra un producto, se imprime su nombre.

1. ¿Qué devuelve el método findFirst() en Stream API?

2. ¿Cuál es la principal diferencia entre findAny() y findFirst()?

3. ¿Qué método es mejor para el rendimiento en flujos paralelos?

question mark

¿Qué devuelve el método findFirst() en Stream API?

Select the correct answer

question mark

¿Cuál es la principal diferencia entre findAny() y findFirst()?

Select the correct answer

question mark

¿Qué método es mejor para el rendimiento en flujos paralelos?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 10

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Awesome!

Completion rate improved to 2.33

bookRecuperación de Elementos de un Flujo con findFirst() y findAny()

Desliza para mostrar el menú

En la Stream API, también es posible extraer solo un elemento coincidente de todo el stream.

Por ejemplo, en una tienda en línea, se puede buscar el primer producto con descuento o cualquier artículo en stock. En estos casos, los métodos findFirst y findAny son útiles porque permiten extraer rápidamente un elemento de un flujo de datos.

El método findFirst()

El método findFirst() se utiliza para obtener el primer elemento de un stream. Esto resulta especialmente útil cuando el orden de los elementos es relevante, como al trabajar con un stream ordenado.

Optional<T> findFirst();

Este método devuelve un Optional<T>, lo que significa que el elemento puede o no ser encontrado.

Ejemplo de uso

En una tienda en línea, es necesario encontrar el primer producto con descuento e imprimir su nombre:

Main.java

Main.java

copy
12345678910111213141516171819202122232425262728293031323334353637383940
package com.example; import java.util.List; import java.util.Optional; import java.util.Arrays; public class Main { public static void main(String[] args) { List<Product> products = Arrays.asList( new Product("Laptop", false), new Product("Smartphone", true), new Product("Tablet", true) ); Optional<Product> discountedProduct = products.parallelStream() .filter(Product::hasDiscount) .findFirst(); discountedProduct.ifPresent(product -> System.out.println("Discounted product: " + product.getName())); } } class Product { private String name; private boolean discount; public Product(String name, boolean discount) { this.name = name; this.discount = discount; } public boolean hasDiscount() { return discount; } public String getName() { return name; } }

El código crea una lista de objetos Product, cada uno con un campo discount. El método filter(Product::hasDiscount) selecciona solo los productos con descuento, y findFirst() recupera el primero. Si se encuentra un producto, se imprime su nombre.

El método findAny()

El método findAny() recupera cualquier elemento de un stream. Es especialmente útil en el procesamiento paralelo ya que puede devolver el primer elemento disponible, lo que lo hace más rápido que findFirst() en algunos casos.

Optional<T> findAny();

Al igual que findFirst(), este método devuelve un Optional<T>, lo que ayuda a evitar problemas con null.

Ejemplo de uso

Busquemos cualquier producto disponible e imprimamos su nombre:

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233343536373839404142
package com.example; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Optional; import java.util.stream.Stream; public class Main { public static void main(String[] args) { List<Product> products = Arrays.asList( new Product("Laptop", false), new Product("Smartphone", true), new Product("Tablet", true) ); Optional<Product> availableProduct = products.parallelStream() .filter(Product::hasDiscount) .findAny(); availableProduct.ifPresent(product -> System.out.println("Product found: " + product.getName())); } } class Product { private String name; private boolean discount; public Product(String name, boolean discount) { this.name = name; this.discount = discount; } public boolean hasDiscount() { return discount; } public String getName() { return name; } }

Este código crea una lista de products que contiene objetos Product con un campo discount. El método filter(Product::hasDiscount) filtra solo los productos con descuento, y findAny() selecciona uno aleatorio. Si se encuentra un producto, se imprime su nombre.

1. ¿Qué devuelve el método findFirst() en Stream API?

2. ¿Cuál es la principal diferencia entre findAny() y findFirst()?

3. ¿Qué método es mejor para el rendimiento en flujos paralelos?

question mark

¿Qué devuelve el método findFirst() en Stream API?

Select the correct answer

question mark

¿Cuál es la principal diferencia entre findAny() y findFirst()?

Select the correct answer

question mark

¿Qué método es mejor para el rendimiento en flujos paralelos?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 3. Capítulo 10
some-alt