Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Hente Elementer fra en Strøm med findFirst() og findAny() | Terminaloperasjoner i Stream API
Stream-API

bookHente Elementer fra en Strøm med findFirst() og findAny()

I Stream API kan du også hente ut kun ett samsvarende element fra hele strømmen.

For eksempel, i en nettbutikk kan du se etter det første rabatterte produktet eller et hvilket som helst produkt på lager. I slike tilfeller er metodene findFirst og findAny nyttige fordi de lar deg raskt hente ut et element fra en datastrøm.

Metoden findFirst()

Metoden findFirst() brukes for å hente ut det første elementet i en strøm. Dette er spesielt nyttig når rekkefølgen på elementene er viktig, for eksempel når du arbeider med en ordnet strøm.

Optional<T> findFirst();

Denne metoden returnerer en Optional<T>, noe som betyr at elementet kanskje finnes, eller kanskje ikke.

Eksempel på bruk

I en nettbutikk må du finne det første rabatterte produktet og skrive ut navnet:

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

Koden oppretter en liste med Product-objekter, hvor hvert objekt har et discount-felt. Metoden filter(Product::hasDiscount) velger kun produkter med rabatt, og findFirst() henter det første. Hvis et produkt blir funnet, skrives navnet ut.

Metoden findAny()

Metoden findAny() henter et vilkårlig element fra en stream. Den er spesielt nyttig ved parallell prosessering siden den kan returnere første tilgjengelige element, noe som kan gjøre den raskere enn findFirst() i enkelte tilfeller.

Optional<T> findAny();

Som findFirst(), returnerer denne metoden en Optional<T>, noe som bidrar til å unngå problemer med null.

Eksempel på bruk

Finn et tilgjengelig produkt og skriv ut dets navn:

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

Denne koden oppretter en products-liste som inneholder Product-objekter med et discount-felt. Metoden filter(Product::hasDiscount) filtrerer ut kun rabatterte produkter, og findAny() velger en tilfeldig en. Hvis et produkt blir funnet, skrives dets navn ut.

1. Hva returnerer metoden findFirst() i Stream API?

2. Hva er hovedforskjellen mellom findAny() og findFirst()?

3. Hvilken metode gir bedre ytelse i parallelle strømmer?

question mark

Hva returnerer metoden findFirst() i Stream API?

Select the correct answer

question mark

Hva er hovedforskjellen mellom findAny() og findFirst()?

Select the correct answer

question mark

Hvilken metode gir bedre ytelse i parallelle strømmer?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 10

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Awesome!

Completion rate improved to 2.33

bookHente Elementer fra en Strøm med findFirst() og findAny()

Sveip for å vise menyen

I Stream API kan du også hente ut kun ett samsvarende element fra hele strømmen.

For eksempel, i en nettbutikk kan du se etter det første rabatterte produktet eller et hvilket som helst produkt på lager. I slike tilfeller er metodene findFirst og findAny nyttige fordi de lar deg raskt hente ut et element fra en datastrøm.

Metoden findFirst()

Metoden findFirst() brukes for å hente ut det første elementet i en strøm. Dette er spesielt nyttig når rekkefølgen på elementene er viktig, for eksempel når du arbeider med en ordnet strøm.

Optional<T> findFirst();

Denne metoden returnerer en Optional<T>, noe som betyr at elementet kanskje finnes, eller kanskje ikke.

Eksempel på bruk

I en nettbutikk må du finne det første rabatterte produktet og skrive ut navnet:

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

Koden oppretter en liste med Product-objekter, hvor hvert objekt har et discount-felt. Metoden filter(Product::hasDiscount) velger kun produkter med rabatt, og findFirst() henter det første. Hvis et produkt blir funnet, skrives navnet ut.

Metoden findAny()

Metoden findAny() henter et vilkårlig element fra en stream. Den er spesielt nyttig ved parallell prosessering siden den kan returnere første tilgjengelige element, noe som kan gjøre den raskere enn findFirst() i enkelte tilfeller.

Optional<T> findAny();

Som findFirst(), returnerer denne metoden en Optional<T>, noe som bidrar til å unngå problemer med null.

Eksempel på bruk

Finn et tilgjengelig produkt og skriv ut dets navn:

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

Denne koden oppretter en products-liste som inneholder Product-objekter med et discount-felt. Metoden filter(Product::hasDiscount) filtrerer ut kun rabatterte produkter, og findAny() velger en tilfeldig en. Hvis et produkt blir funnet, skrives dets navn ut.

1. Hva returnerer metoden findFirst() i Stream API?

2. Hva er hovedforskjellen mellom findAny() og findFirst()?

3. Hvilken metode gir bedre ytelse i parallelle strømmer?

question mark

Hva returnerer metoden findFirst() i Stream API?

Select the correct answer

question mark

Hva er hovedforskjellen mellom findAny() og findFirst()?

Select the correct answer

question mark

Hvilken metode gir bedre ytelse i parallelle strømmer?

Select the correct answer

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 3. Kapittel 10
some-alt