Hentning 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
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; } }
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
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; } }
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?
Tak for dine kommentarer!
Spørg AI
Spørg AI
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
Hentning 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
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; } }
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
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; } }
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?
Tak for dine kommentarer!