Alkioiden Hakeminen Virrasta FindFirst()- ja FindAny()-metodeilla
Pyyhkäise näyttääksesi valikon
Java Stream API:lla voidaan poimia vain yksi sopiva alkio koko virrasta.
Esimerkiksi verkkokaupassa saatetaan etsiä ensimmäistä alennustuotetta tai mitä tahansa varastossa olevaa tuotetta. Tällaisissa tilanteissa 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>, mikä tarkoittaa, että alkio voidaan löytää tai sitä ei löydy.
Esimerkkikäyttö
Verkkokaupassa täytyy löytää ensimmäinen alennettu tuote 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 satunnaisen niistä. 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. Kumpi 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