Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Elemente aus einem Stream mit FindFirst() und FindAny() abrufen | Abschnitt
Stream-API in Java

bookElemente aus einem Stream mit FindFirst() und FindAny() abrufen

Swipe um das Menü anzuzeigen

Im Stream API besteht auch die Möglichkeit, ein einzelnes passendes Element aus dem gesamten Stream zu extrahieren.

Beispielsweise kann in einem Online-Shop nach dem ersten reduzierten Produkt oder beliebigen verfügbaren Artikel gesucht werden. In solchen Fällen sind die Methoden findFirst und findAny nützlich, da sie ein Element schnell aus einem Datenstrom extrahieren können.

Die Methode findFirst()

Die Methode findFirst() dient dazu, 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.

Anwendungsbeispiel

In einem Online-Shop soll das erste rabattierte Produkt gefunden und dessen Name ausgegeben werden:

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; } }

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 zurück. Wenn 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

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; } }

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?

question mark

Was gibt die Methode findFirst() im Stream API zurück?

Select the correct answer

question mark

Was ist der Hauptunterschied zwischen findAny() und findFirst()?

Select the correct answer

question mark

Welche Methode bietet eine bessere Performance bei parallelen Streams?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 36

Fragen Sie AI

expand

Fragen Sie AI

ChatGPT

Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen

Abschnitt 1. Kapitel 36
some-alt