Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Recuperação de Elementos de um Stream com findFirst() e findAny() | Operações Terminais na Stream API
Stream API

bookRecuperação de Elementos de um Stream com findFirst() e findAny()

Na Stream API, também é possível extrair apenas um elemento correspondente de todo o stream.

Por exemplo, em uma loja online, pode-se buscar pelo primeiro produto com desconto ou qualquer item em estoque. Nesses casos, os métodos findFirst e findAny são úteis, pois permitem extrair rapidamente um elemento de um fluxo de dados.

O Método findFirst()

O método findFirst() é utilizado para obter o primeiro elemento em um stream. Isso é especialmente útil quando a ordem dos elementos é relevante, como ao trabalhar com um stream ordenado.

Optional<T> findFirst();

Este método retorna um Optional<T>, o que significa que o elemento pode ou não ser encontrado.

Exemplo de Uso

Em uma loja online, é necessário encontrar o primeiro produto com desconto e exibir seu nome:

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

O código cria uma lista de objetos Product, cada um com um campo discount. O método filter(Product::hasDiscount) seleciona apenas os produtos com desconto, e findFirst() recupera o primeiro. Se um produto for encontrado, seu nome é exibido.

O método findAny()

O método findAny() recupera qualquer elemento de um stream. É especialmente útil em processamento paralelo, pois pode retornar o primeiro elemento disponível, tornando-o mais rápido que o findFirst() em alguns casos.

Optional<T> findAny();

Assim como findFirst(), este método retorna um Optional<T>, ajudando a evitar problemas com null.

Exemplo de Uso

Vamos encontrar qualquer produto disponível e exibir seu nome:

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 cria uma lista de products contendo objetos Product com um campo discount. O método filter(Product::hasDiscount) filtra apenas os produtos com desconto, e findAny() seleciona um aleatório. Se um produto for encontrado, seu nome é exibido.

1. O que o método findFirst() retorna na Stream API?

2. Qual é a principal diferença entre findAny() e findFirst()?

3. Qual método apresenta melhor desempenho em streams paralelos?

question mark

O que o método findFirst() retorna na Stream API?

Select the correct answer

question mark

Qual é a principal diferença entre findAny() e findFirst()?

Select the correct answer

question mark

Qual método apresenta melhor desempenho em streams paralelos?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 10

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Suggested prompts:

Can you explain the difference between findFirst() and findAny() in more detail?

When should I use findFirst() versus findAny()?

Can you provide more examples of using these methods in different scenarios?

Awesome!

Completion rate improved to 2.33

bookRecuperação de Elementos de um Stream com findFirst() e findAny()

Deslize para mostrar o menu

Na Stream API, também é possível extrair apenas um elemento correspondente de todo o stream.

Por exemplo, em uma loja online, pode-se buscar pelo primeiro produto com desconto ou qualquer item em estoque. Nesses casos, os métodos findFirst e findAny são úteis, pois permitem extrair rapidamente um elemento de um fluxo de dados.

O Método findFirst()

O método findFirst() é utilizado para obter o primeiro elemento em um stream. Isso é especialmente útil quando a ordem dos elementos é relevante, como ao trabalhar com um stream ordenado.

Optional<T> findFirst();

Este método retorna um Optional<T>, o que significa que o elemento pode ou não ser encontrado.

Exemplo de Uso

Em uma loja online, é necessário encontrar o primeiro produto com desconto e exibir seu nome:

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

O código cria uma lista de objetos Product, cada um com um campo discount. O método filter(Product::hasDiscount) seleciona apenas os produtos com desconto, e findFirst() recupera o primeiro. Se um produto for encontrado, seu nome é exibido.

O método findAny()

O método findAny() recupera qualquer elemento de um stream. É especialmente útil em processamento paralelo, pois pode retornar o primeiro elemento disponível, tornando-o mais rápido que o findFirst() em alguns casos.

Optional<T> findAny();

Assim como findFirst(), este método retorna um Optional<T>, ajudando a evitar problemas com null.

Exemplo de Uso

Vamos encontrar qualquer produto disponível e exibir seu nome:

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 cria uma lista de products contendo objetos Product com um campo discount. O método filter(Product::hasDiscount) filtra apenas os produtos com desconto, e findAny() seleciona um aleatório. Se um produto for encontrado, seu nome é exibido.

1. O que o método findFirst() retorna na Stream API?

2. Qual é a principal diferença entre findAny() e findFirst()?

3. Qual método apresenta melhor desempenho em streams paralelos?

question mark

O que o método findFirst() retorna na Stream API?

Select the correct answer

question mark

Qual é a principal diferença entre findAny() e findFirst()?

Select the correct answer

question mark

Qual método apresenta melhor desempenho em streams paralelos?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 3. Capítulo 10
some-alt