Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Alkioiden Hakeminen Virrasta FindFirst()- ja FindAny()-metodeilla | Osio
Practice
Projects
Quizzes & Challenges
Visat
Challenges
/
Stream API Javassa

bookAlkioiden 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

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

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

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

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?

question mark

Mitä findFirst()-metodi palauttaa Stream API:ssa?

Select the correct answer

question mark

Mikä on tärkein ero findAny()- ja findFirst()-metodien välillä?

Select the correct answer

question mark

Kumpi menetelmä on suorituskyvyltään parempi rinnakkaisissa streameissa?

Select the correct answer

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 1. Luku 36

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 1. Luku 36
some-alt