Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Hentning af Elementer fra en Stream med findFirst() og findAny() | Terminale Operationer i Stream API'et
Stream API

bookHentning af Elementer fra en Stream med findFirst() og findAny()

I Stream API kan du også udtrække kun ét matchende element fra hele strømmen.

For eksempel, i en onlinebutik, kan du søge efter det første nedsatte produkt eller et hvilket som helst produkt på lager. I sådanne tilfælde er metoderne findFirst og findAny nyttige, da de gør det muligt hurtigt at udtrække et element fra en datastrøm.

Metoden findFirst()

Metoden findFirst() bruges til at hente det første element i en strøm. Dette er især nyttigt, når rækkefølgen af elementer er vigtig, såsom ved arbejde med en ordnet strøm.

Optional<T> findFirst();

Denne metode returnerer en Optional<T>, hvilket betyder, at elementet muligvis ikke findes.

Eksempel på anvendelse

I en onlinebutik er der behov for at finde det første nedsatte produkt og udskrive dets navn:

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 opretter en liste af Product-objekter, hver med et discount-felt. Metoden filter(Product::hasDiscount) vælger kun produkter med rabat, og findFirst() henter det første. Hvis et produkt findes, udskrives dets navn.

Metoden findAny()

Metoden findAny() henter et vilkårligt element fra en stream. Den er særligt nyttig ved parallel behandling, da den kan returnere det første tilgængelige element, hvilket kan gøre den hurtigere end findFirst() i visse tilfælde.

Optional<T> findAny();

Ligesom findFirst() returnerer denne metode en Optional<T>, hvilket hjælper med at undgå problemer med null.

Eksempel på brug

Lad os finde et vilkårligt tilgængeligt produkt og udskrive 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 kode opretter en products liste bestående af Product objekter med et discount felt. Metoden filter(Product::hasDiscount) filtrerer kun produkter med rabat fra, og findAny() vælger et tilfældigt et. Hvis et produkt findes, udskrives dets navn.

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

2. Hvad er den primære forskel mellem findAny() og findFirst()?

3. Hvilken metode er bedst for ydeevne i parallelle streams?

question mark

Hvad returnerer metoden findFirst() i Stream API?

Select the correct answer

question mark

Hvad er den primære forskel mellem findAny() og findFirst()?

Select the correct answer

question mark

Hvilken metode er bedst for ydeevne i parallelle streams?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 10

Spørg AI

expand

Spørg AI

ChatGPT

Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat

Awesome!

Completion rate improved to 2.33

bookHentning af Elementer fra en Stream med findFirst() og findAny()

Stryg for at vise menuen

I Stream API kan du også udtrække kun ét matchende element fra hele strømmen.

For eksempel, i en onlinebutik, kan du søge efter det første nedsatte produkt eller et hvilket som helst produkt på lager. I sådanne tilfælde er metoderne findFirst og findAny nyttige, da de gør det muligt hurtigt at udtrække et element fra en datastrøm.

Metoden findFirst()

Metoden findFirst() bruges til at hente det første element i en strøm. Dette er især nyttigt, når rækkefølgen af elementer er vigtig, såsom ved arbejde med en ordnet strøm.

Optional<T> findFirst();

Denne metode returnerer en Optional<T>, hvilket betyder, at elementet muligvis ikke findes.

Eksempel på anvendelse

I en onlinebutik er der behov for at finde det første nedsatte produkt og udskrive dets navn:

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 opretter en liste af Product-objekter, hver med et discount-felt. Metoden filter(Product::hasDiscount) vælger kun produkter med rabat, og findFirst() henter det første. Hvis et produkt findes, udskrives dets navn.

Metoden findAny()

Metoden findAny() henter et vilkårligt element fra en stream. Den er særligt nyttig ved parallel behandling, da den kan returnere det første tilgængelige element, hvilket kan gøre den hurtigere end findFirst() i visse tilfælde.

Optional<T> findAny();

Ligesom findFirst() returnerer denne metode en Optional<T>, hvilket hjælper med at undgå problemer med null.

Eksempel på brug

Lad os finde et vilkårligt tilgængeligt produkt og udskrive 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 kode opretter en products liste bestående af Product objekter med et discount felt. Metoden filter(Product::hasDiscount) filtrerer kun produkter med rabat fra, og findAny() vælger et tilfældigt et. Hvis et produkt findes, udskrives dets navn.

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

2. Hvad er den primære forskel mellem findAny() og findFirst()?

3. Hvilken metode er bedst for ydeevne i parallelle streams?

question mark

Hvad returnerer metoden findFirst() i Stream API?

Select the correct answer

question mark

Hvad er den primære forskel mellem findAny() og findFirst()?

Select the correct answer

question mark

Hvilken metode er bedst for ydeevne i parallelle streams?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 3. Kapitel 10
some-alt