Hente 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
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 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
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 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?
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
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
Hente 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
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 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
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 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?
Takk for tilbakemeldingene dine!