Abrufen von Elementen aus einem Stream mit FindFirst() und FindAny()
Im Stream API kann auch nur ein passendes Element aus dem gesamten Stream extrahiert werden.
Beispielsweise kann in einem Online-Shop nach dem ersten rabattierten Produkt oder irgendeinem verfügbaren Artikel gesucht werden. In solchen Fällen sind die Methoden findFirst und findAny nützlich, da sie ermöglichen, schnell ein Element aus einem Datenstrom zu extrahieren.
Die Methode findFirst()
Die Methode findFirst() wird verwendet, um das erste Element in einem Stream zu ermitteln. Dies ist besonders nützlich, wenn die Reihenfolge der Elemente relevant ist, beispielsweise bei der Arbeit mit einem geordneten Stream.
Optional<T> findFirst();
Diese Methode gibt ein Optional<T> zurück, was bedeutet, dass das Element möglicherweise gefunden wird oder nicht.
Beispielanwendung
In einem Online-Shop soll das erste rabattierte Produkt gefunden und dessen Name ausgegeben werden:
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; } }
Der Code erstellt eine Liste von Product-Objekten, die jeweils ein discount-Feld besitzen. Die Methode filter(Product::hasDiscount) wählt nur reduzierte Produkte aus, und findFirst() gibt das erste gefundene Produkt zurück. Falls ein Produkt gefunden wird, wird dessen Name ausgegeben.
Die Methode findAny()
Die Methode findAny() gibt ein beliebiges Element aus einem Stream zurück. Sie ist besonders nützlich bei der parallelen Verarbeitung, da sie das erstverfügbare Element liefern kann, was in manchen Fällen schneller als findFirst() ist.
Optional<T> findAny();
Wie findFirst() gibt auch diese Methode ein Optional<T> zurück, wodurch Probleme mit null vermieden werden.
Beispielanwendung
Es soll ein beliebiges verfügbares Produkt gefunden und dessen Name ausgegeben werden:
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; } }
Dieser Code erstellt eine products-Liste, die Product-Objekte mit einem discount-Feld enthält. Die Methode filter(Product::hasDiscount) filtert nur reduzierte Produkte heraus, und findAny() wählt ein beliebiges aus. Wenn ein Produkt gefunden wird, wird dessen Name ausgegeben.
1. Was gibt die Methode findFirst() im Stream API zurück?
2. Was ist der Hauptunterschied zwischen findAny() und findFirst()?
3. Welche Methode bietet eine bessere Performance bei parallelen Streams?
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Can you explain the difference between findFirst() and findAny() in more detail?
When should I use findFirst() versus findAny()?
Can you provide more examples of using these methods in different scenarios?
Awesome!
Completion rate improved to 2.33
Abrufen von Elementen aus einem Stream mit FindFirst() und FindAny()
Swipe um das Menü anzuzeigen
Im Stream API kann auch nur ein passendes Element aus dem gesamten Stream extrahiert werden.
Beispielsweise kann in einem Online-Shop nach dem ersten rabattierten Produkt oder irgendeinem verfügbaren Artikel gesucht werden. In solchen Fällen sind die Methoden findFirst und findAny nützlich, da sie ermöglichen, schnell ein Element aus einem Datenstrom zu extrahieren.
Die Methode findFirst()
Die Methode findFirst() wird verwendet, um das erste Element in einem Stream zu ermitteln. Dies ist besonders nützlich, wenn die Reihenfolge der Elemente relevant ist, beispielsweise bei der Arbeit mit einem geordneten Stream.
Optional<T> findFirst();
Diese Methode gibt ein Optional<T> zurück, was bedeutet, dass das Element möglicherweise gefunden wird oder nicht.
Beispielanwendung
In einem Online-Shop soll das erste rabattierte Produkt gefunden und dessen Name ausgegeben werden:
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; } }
Der Code erstellt eine Liste von Product-Objekten, die jeweils ein discount-Feld besitzen. Die Methode filter(Product::hasDiscount) wählt nur reduzierte Produkte aus, und findFirst() gibt das erste gefundene Produkt zurück. Falls ein Produkt gefunden wird, wird dessen Name ausgegeben.
Die Methode findAny()
Die Methode findAny() gibt ein beliebiges Element aus einem Stream zurück. Sie ist besonders nützlich bei der parallelen Verarbeitung, da sie das erstverfügbare Element liefern kann, was in manchen Fällen schneller als findFirst() ist.
Optional<T> findAny();
Wie findFirst() gibt auch diese Methode ein Optional<T> zurück, wodurch Probleme mit null vermieden werden.
Beispielanwendung
Es soll ein beliebiges verfügbares Produkt gefunden und dessen Name ausgegeben werden:
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; } }
Dieser Code erstellt eine products-Liste, die Product-Objekte mit einem discount-Feld enthält. Die Methode filter(Product::hasDiscount) filtert nur reduzierte Produkte heraus, und findAny() wählt ein beliebiges aus. Wenn ein Produkt gefunden wird, wird dessen Name ausgegeben.
1. Was gibt die Methode findFirst() im Stream API zurück?
2. Was ist der Hauptunterschied zwischen findAny() und findFirst()?
3. Welche Methode bietet eine bessere Performance bei parallelen Streams?
Danke für Ihr Feedback!