Alkioiden Hakeminen Virrasta FindFirst()- ja FindAny()-Metodeilla
Stream API:ssa voidaan myös poimia vain yksi vastaava alkio koko virrasta.
Esimerkiksi verkkokaupassa saatetaan etsiä ensimmäistä alennustuotetta tai mitä tahansa varastossa olevaa tuotetta. Tällaisissa tapauksissa findFirst- ja findAny-metodit ovat hyödyllisiä, koska niiden avulla voidaan nopeasti poimia alkio datavirrasta.
findFirst()-metodi
findFirst()-metodia käytetään ensimmäisen alkion hakemiseen virrasta. Tämä on erityisen hyödyllistä, kun alkioiden järjestyksellä on merkitystä, kuten järjestetyssä virrassa.
Optional<T> findFirst();
Tämä metodi palauttaa Optional<T>-olion, mikä tarkoittaa, että alkio voidaan löytää tai olla löytämättä.
Esimerkin käyttö
Verkkokaupassa täytyy löytää ensimmäinen alennustuote ja tulostaa sen nimi:
Main.java
12345678910111213141516171819202122232425262728293031323334353637383940package 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; } }
Koodi luo listan Product-olioita, joilla jokaisella on discount-kenttä. Metodi filter(Product::hasDiscount) valitsee vain alennetut tuotteet, ja findFirst() hakee ensimmäisen niistä. Jos tuote löytyy, sen nimi tulostetaan.
findAny()-metodi
findAny()-metodi hakee minkä tahansa alkion virrasta. Se on erityisen hyödyllinen rinnakkaiskäsittelyssä, koska se voi palauttaa ensimmäisen saatavilla olevan alkion, mikä tekee siitä joissain tapauksissa nopeamman kuin findFirst().
Optional<T> findAny();
Kuten findFirst(), tämä metodi palauttaa Optional<T>, mikä auttaa välttämään ongelmia null-arvojen kanssa.
Esimerkin käyttö
Etsitään mikä tahansa saatavilla oleva tuote ja tulostetaan sen nimi:
Main.java
123456789101112131415161718192021222324252627282930313233343536373839404142package 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; } }
Tämä koodi luo products-listan, joka sisältää Product-olioita, joilla on discount-kenttä. Metodi filter(Product::hasDiscount) suodattaa vain alennetut tuotteet, ja findAny() valitsee niistä satunnaisen. Jos tuote löytyy, sen nimi tulostetaan.
1. Mitä findFirst()-metodi palauttaa Stream API:ssa?
2. Mikä on tärkein ero findAny()- ja findFirst()-metodien välillä?
3. Mikä menetelmä on suorituskyvyltään parempi rinnakkaisissa streameissa?
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
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
Alkioiden Hakeminen Virrasta FindFirst()- ja FindAny()-Metodeilla
Pyyhkäise näyttääksesi valikon
Stream API:ssa voidaan myös poimia vain yksi vastaava alkio koko virrasta.
Esimerkiksi verkkokaupassa saatetaan etsiä ensimmäistä alennustuotetta tai mitä tahansa varastossa olevaa tuotetta. Tällaisissa tapauksissa findFirst- ja findAny-metodit ovat hyödyllisiä, koska niiden avulla voidaan nopeasti poimia alkio datavirrasta.
findFirst()-metodi
findFirst()-metodia käytetään ensimmäisen alkion hakemiseen virrasta. Tämä on erityisen hyödyllistä, kun alkioiden järjestyksellä on merkitystä, kuten järjestetyssä virrassa.
Optional<T> findFirst();
Tämä metodi palauttaa Optional<T>-olion, mikä tarkoittaa, että alkio voidaan löytää tai olla löytämättä.
Esimerkin käyttö
Verkkokaupassa täytyy löytää ensimmäinen alennustuote ja tulostaa sen nimi:
Main.java
12345678910111213141516171819202122232425262728293031323334353637383940package 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; } }
Koodi luo listan Product-olioita, joilla jokaisella on discount-kenttä. Metodi filter(Product::hasDiscount) valitsee vain alennetut tuotteet, ja findFirst() hakee ensimmäisen niistä. Jos tuote löytyy, sen nimi tulostetaan.
findAny()-metodi
findAny()-metodi hakee minkä tahansa alkion virrasta. Se on erityisen hyödyllinen rinnakkaiskäsittelyssä, koska se voi palauttaa ensimmäisen saatavilla olevan alkion, mikä tekee siitä joissain tapauksissa nopeamman kuin findFirst().
Optional<T> findAny();
Kuten findFirst(), tämä metodi palauttaa Optional<T>, mikä auttaa välttämään ongelmia null-arvojen kanssa.
Esimerkin käyttö
Etsitään mikä tahansa saatavilla oleva tuote ja tulostetaan sen nimi:
Main.java
123456789101112131415161718192021222324252627282930313233343536373839404142package 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; } }
Tämä koodi luo products-listan, joka sisältää Product-olioita, joilla on discount-kenttä. Metodi filter(Product::hasDiscount) suodattaa vain alennetut tuotteet, ja findAny() valitsee niistä satunnaisen. Jos tuote löytyy, sen nimi tulostetaan.
1. Mitä findFirst()-metodi palauttaa Stream API:ssa?
2. Mikä on tärkein ero findAny()- ja findFirst()-metodien välillä?
3. Mikä menetelmä on suorituskyvyltään parempi rinnakkaisissa streameissa?
Kiitos palautteestasi!