Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Recupero di Elementi da uno Stream con findFirst() e findAny() | Operazioni Terminali Nello Stream API
Stream API

bookRecupero di Elementi da uno Stream con findFirst() e findAny()

Nella Stream API, è possibile estrarre anche un solo elemento corrispondente dall'intero stream.

Ad esempio, in un negozio online, si potrebbe cercare il primo prodotto scontato o qualsiasi articolo disponibile in magazzino. In questi casi, i metodi findFirst e findAny sono utili perché consentono di estrarre rapidamente un elemento da uno stream di dati.

Il metodo findFirst()

Il metodo findFirst() viene utilizzato per recuperare il primo elemento in uno stream. Questo è particolarmente utile quando l'ordine degli elementi è importante, ad esempio quando si lavora con uno stream ordinato.

Optional<T> findFirst();

Questo metodo restituisce un Optional<T>, il che significa che l'elemento potrebbe essere trovato oppure no.

Esempio di utilizzo

In un negozio online, è necessario trovare il primo prodotto scontato e stampare il suo 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; } }

Il codice crea una lista di oggetti Product, ciascuno con un campo discount. Il metodo filter(Product::hasDiscount) seleziona solo i prodotti scontati, e findFirst() recupera il primo. Se viene trovato un prodotto, viene stampato il suo nome.

Il metodo findAny()

Il metodo findAny() recupera un elemento qualsiasi da uno stream. È particolarmente utile nell'elaborazione parallela poiché può restituire il primo elemento disponibile, risultando più veloce di findFirst() in alcuni casi.

Optional<T> findAny();

Come findFirst(), questo metodo restituisce un Optional<T>, contribuendo a evitare problemi con null.

Esempio di utilizzo

Ricerca di un prodotto disponibile e stampa del suo 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; } }

Questo codice crea una lista di products contenente oggetti Product con un campo discount. Il metodo filter(Product::hasDiscount) filtra solo i prodotti scontati, e findAny() seleziona uno casuale. Se viene trovato un prodotto, viene stampato il suo nome.

1. Cosa restituisce il metodo findFirst() nello Stream API?

2. Qual è la principale differenza tra findAny() e findFirst()?

3. Quale metodo offre prestazioni migliori nei flussi paralleli?

question mark

Cosa restituisce il metodo findFirst() nello Stream API?

Select the correct answer

question mark

Qual è la principale differenza tra findAny() e findFirst()?

Select the correct answer

question mark

Quale metodo offre prestazioni migliori nei flussi paralleli?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 10

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Awesome!

Completion rate improved to 2.33

bookRecupero di Elementi da uno Stream con findFirst() e findAny()

Scorri per mostrare il menu

Nella Stream API, è possibile estrarre anche un solo elemento corrispondente dall'intero stream.

Ad esempio, in un negozio online, si potrebbe cercare il primo prodotto scontato o qualsiasi articolo disponibile in magazzino. In questi casi, i metodi findFirst e findAny sono utili perché consentono di estrarre rapidamente un elemento da uno stream di dati.

Il metodo findFirst()

Il metodo findFirst() viene utilizzato per recuperare il primo elemento in uno stream. Questo è particolarmente utile quando l'ordine degli elementi è importante, ad esempio quando si lavora con uno stream ordinato.

Optional<T> findFirst();

Questo metodo restituisce un Optional<T>, il che significa che l'elemento potrebbe essere trovato oppure no.

Esempio di utilizzo

In un negozio online, è necessario trovare il primo prodotto scontato e stampare il suo 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; } }

Il codice crea una lista di oggetti Product, ciascuno con un campo discount. Il metodo filter(Product::hasDiscount) seleziona solo i prodotti scontati, e findFirst() recupera il primo. Se viene trovato un prodotto, viene stampato il suo nome.

Il metodo findAny()

Il metodo findAny() recupera un elemento qualsiasi da uno stream. È particolarmente utile nell'elaborazione parallela poiché può restituire il primo elemento disponibile, risultando più veloce di findFirst() in alcuni casi.

Optional<T> findAny();

Come findFirst(), questo metodo restituisce un Optional<T>, contribuendo a evitare problemi con null.

Esempio di utilizzo

Ricerca di un prodotto disponibile e stampa del suo 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; } }

Questo codice crea una lista di products contenente oggetti Product con un campo discount. Il metodo filter(Product::hasDiscount) filtra solo i prodotti scontati, e findAny() seleziona uno casuale. Se viene trovato un prodotto, viene stampato il suo nome.

1. Cosa restituisce il metodo findFirst() nello Stream API?

2. Qual è la principale differenza tra findAny() e findFirst()?

3. Quale metodo offre prestazioni migliori nei flussi paralleli?

question mark

Cosa restituisce il metodo findFirst() nello Stream API?

Select the correct answer

question mark

Qual è la principale differenza tra findAny() e findFirst()?

Select the correct answer

question mark

Quale metodo offre prestazioni migliori nei flussi paralleli?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 3. Capitolo 10
some-alt