Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Récupération d’Éléments d’un Flux avec findFirst() et findAny() | Opérations Terminales dans l'API Stream
API Stream

bookRécupération d’Éléments d’un Flux avec findFirst() et findAny()

Dans l’API Stream, il est également possible d’extraire un seul élément correspondant de l’ensemble du flux.

Par exemple, dans une boutique en ligne, il peut s’agir de rechercher le premier produit en promotion ou n’importe quel article en stock. Dans de tels cas, les méthodes findFirst et findAny sont utiles car elles permettent d’extraire rapidement un élément d’un flux de données.

La méthode findFirst()

La méthode findFirst() permet de récupérer le premier élément d’un flux. Ceci est particulièrement utile lorsque l’ordre des éléments est important, par exemple lors du traitement d’un flux ordonné.

Optional<T> findFirst();

Cette méthode retourne un Optional<T>, ce qui signifie que l’élément peut être trouvé ou non.

Exemple d’utilisation

Dans une boutique en ligne, il est nécessaire de trouver le premier produit en promotion et d’afficher son nom :

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

Le code crée une liste d’objets Product, chacun possédant un champ discount. La méthode filter(Product::hasDiscount) sélectionne uniquement les produits en promotion, et findFirst() récupère le premier. Si un produit est trouvé, son nom est affiché.

La méthode findAny()

La méthode findAny() récupère n’importe quel élément d’un stream. Elle est particulièrement utile lors du traitement parallèle puisqu’elle peut retourner le premier élément disponible, ce qui la rend parfois plus rapide que findFirst().

Optional<T> findAny();

Comme findFirst(), cette méthode retourne un Optional<T>, ce qui permet d'éviter les problèmes liés à null.

Exemple d'utilisation

Recherche de n'importe quel produit disponible et affichage de son nom :

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

Ce code crée une liste products contenant des objets Product avec un champ discount. La méthode filter(Product::hasDiscount) filtre uniquement les produits en promotion, et findAny() sélectionne un produit aléatoire. Si un produit est trouvé, son nom est affiché.

1. Que retourne la méthode findFirst() dans le Stream API ?

2. Quelle est la principale différence entre findAny() et findFirst() ?

3. Quelle méthode offre de meilleures performances dans les flux parallèles ?

question mark

Que retourne la méthode findFirst() dans le Stream API ?

Select the correct answer

question mark

Quelle est la principale différence entre findAny() et findFirst() ?

Select the correct answer

question mark

Quelle méthode offre de meilleures performances dans les flux parallèles ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 10

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Awesome!

Completion rate improved to 2.33

bookRécupération d’Éléments d’un Flux avec findFirst() et findAny()

Glissez pour afficher le menu

Dans l’API Stream, il est également possible d’extraire un seul élément correspondant de l’ensemble du flux.

Par exemple, dans une boutique en ligne, il peut s’agir de rechercher le premier produit en promotion ou n’importe quel article en stock. Dans de tels cas, les méthodes findFirst et findAny sont utiles car elles permettent d’extraire rapidement un élément d’un flux de données.

La méthode findFirst()

La méthode findFirst() permet de récupérer le premier élément d’un flux. Ceci est particulièrement utile lorsque l’ordre des éléments est important, par exemple lors du traitement d’un flux ordonné.

Optional<T> findFirst();

Cette méthode retourne un Optional<T>, ce qui signifie que l’élément peut être trouvé ou non.

Exemple d’utilisation

Dans une boutique en ligne, il est nécessaire de trouver le premier produit en promotion et d’afficher son nom :

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

Le code crée une liste d’objets Product, chacun possédant un champ discount. La méthode filter(Product::hasDiscount) sélectionne uniquement les produits en promotion, et findFirst() récupère le premier. Si un produit est trouvé, son nom est affiché.

La méthode findAny()

La méthode findAny() récupère n’importe quel élément d’un stream. Elle est particulièrement utile lors du traitement parallèle puisqu’elle peut retourner le premier élément disponible, ce qui la rend parfois plus rapide que findFirst().

Optional<T> findAny();

Comme findFirst(), cette méthode retourne un Optional<T>, ce qui permet d'éviter les problèmes liés à null.

Exemple d'utilisation

Recherche de n'importe quel produit disponible et affichage de son nom :

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

Ce code crée une liste products contenant des objets Product avec un champ discount. La méthode filter(Product::hasDiscount) filtre uniquement les produits en promotion, et findAny() sélectionne un produit aléatoire. Si un produit est trouvé, son nom est affiché.

1. Que retourne la méthode findFirst() dans le Stream API ?

2. Quelle est la principale différence entre findAny() et findFirst() ?

3. Quelle méthode offre de meilleures performances dans les flux parallèles ?

question mark

Que retourne la méthode findFirst() dans le Stream API ?

Select the correct answer

question mark

Quelle est la principale différence entre findAny() et findFirst() ?

Select the correct answer

question mark

Quelle méthode offre de meilleures performances dans les flux parallèles ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 3. Chapitre 10
some-alt