Hämta Element Från en Stream Med findFirst() och findAny()
I Stream API kan du även extrahera endast ett matchande element från hela strömmen.
Till exempel, i en webbutik kan du leta efter den första rabatterade produkten eller valfri vara i lager. I sådana fall är metoderna findFirst och findAny användbara eftersom de gör det möjligt att snabbt extrahera ett element från en datastöm.
Metoden findFirst()
Metoden findFirst() används för att hämta det första elementet i en ström. Detta är särskilt användbart när ordningen på elementen är viktig, till exempel vid arbete med en ordnad ström.
Optional<T> findFirst();
Denna metod returnerar en Optional<T>, vilket innebär att elementet kan hittas eller inte hittas.
Exempel på användning
I en webbutik behöver du hitta den första rabatterade produkten och skriva ut dess namn:
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 skapar en lista av Product-objekt, där varje objekt har ett discount-fält. Metoden filter(Product::hasDiscount) väljer endast rabatterade produkter, och findFirst() hämtar den första. Om en produkt hittas skrivs dess namn ut.
Metoden findAny()
Metoden findAny() hämtar valfritt element från en ström. Den är särskilt användbar vid parallell bearbetning eftersom den kan returnera första tillgängliga elementet, vilket gör den snabbare än findFirst() i vissa fall.
Optional<T> findAny();
Precis som findFirst() returnerar denna metod en Optional<T>, vilket hjälper till att undvika problem med null.
Exempel på användning
Låt oss hitta en tillgänglig produkt och skriva ut dess namn:
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; } }
Denna kod skapar en lista products som innehåller Product-objekt med ett discount-fält. Metoden filter(Product::hasDiscount) filtrerar ut endast rabatterade produkter, och findAny() väljer en slumpmässig. Om en produkt hittas skrivs dess namn ut.
1. Vad returnerar metoden findFirst() i Stream API?
2. Vad är den största skillnaden mellan findAny() och findFirst()?
3. Vilken metod är bättre för prestanda i parallella strömmar?
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Awesome!
Completion rate improved to 2.33
Hämta Element Från en Stream Med findFirst() och findAny()
Svep för att visa menyn
I Stream API kan du även extrahera endast ett matchande element från hela strömmen.
Till exempel, i en webbutik kan du leta efter den första rabatterade produkten eller valfri vara i lager. I sådana fall är metoderna findFirst och findAny användbara eftersom de gör det möjligt att snabbt extrahera ett element från en datastöm.
Metoden findFirst()
Metoden findFirst() används för att hämta det första elementet i en ström. Detta är särskilt användbart när ordningen på elementen är viktig, till exempel vid arbete med en ordnad ström.
Optional<T> findFirst();
Denna metod returnerar en Optional<T>, vilket innebär att elementet kan hittas eller inte hittas.
Exempel på användning
I en webbutik behöver du hitta den första rabatterade produkten och skriva ut dess namn:
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 skapar en lista av Product-objekt, där varje objekt har ett discount-fält. Metoden filter(Product::hasDiscount) väljer endast rabatterade produkter, och findFirst() hämtar den första. Om en produkt hittas skrivs dess namn ut.
Metoden findAny()
Metoden findAny() hämtar valfritt element från en ström. Den är särskilt användbar vid parallell bearbetning eftersom den kan returnera första tillgängliga elementet, vilket gör den snabbare än findFirst() i vissa fall.
Optional<T> findAny();
Precis som findFirst() returnerar denna metod en Optional<T>, vilket hjälper till att undvika problem med null.
Exempel på användning
Låt oss hitta en tillgänglig produkt och skriva ut dess namn:
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; } }
Denna kod skapar en lista products som innehåller Product-objekt med ett discount-fält. Metoden filter(Product::hasDiscount) filtrerar ut endast rabatterade produkter, och findAny() väljer en slumpmässig. Om en produkt hittas skrivs dess namn ut.
1. Vad returnerar metoden findFirst() i Stream API?
2. Vad är den största skillnaden mellan findAny() och findFirst()?
3. Vilken metod är bättre för prestanda i parallella strömmar?
Tack för dina kommentarer!