Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lernen Arbeiten mit Verschachtelten Strukturen mit der flatMap()-Methode | Abschnitt
Practice
Projects
Quizzes & Challenges
Quizze
Challenges
/
Stream-API in Java

bookArbeiten mit Verschachtelten Strukturen mit der flatMap()-Methode

Swipe um das Menü anzuzeigen

Beim Arbeiten mit Datensammlungen in Java trifft man häufig auf Situationen, in denen die Strukturen verschachtelt sind. Zum Beispiel kann es eine Liste von Objekten geben, von denen jedes eine weitere Liste von Objekten enthält.

In solchen Fällen sind Standardoperationen wie map() nicht geeignet, um alle verschachtelten Daten in einem einzigen Stream zu extrahieren. Hier kommt die Methode flatMap() aus der Stream API zum Einsatz.

Die Methode flatMap() nimmt eine Funktion entgegen, die jedes Element des Streams in einen neuen Stream umwandelt.

<R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper)
  • <R> — der Typ der Elemente im resultierenden Stream;
  • Function<? super T, ? extends Stream<? extends R>> mapper — eine Funktion, die ein Element aus dem ursprünglichen Stream (T) entgegennimmt und einen Stream (Stream<R>) der resultierenden Elemente zurückgibt.

Es ist wichtig zu verstehen, dass flatMap() nicht einfach ein neues Element zurückgibt, sondern für jedes Element einen Stream (oder eine andere Collection). Diese einzelnen Streams werden dann zu einem einzigen kombiniert.

Praktische Anwendung

Stellen Sie sich vor, Sie haben mehrere Fabriken, die jeweils verschiedene Arten von Produkten herstellen. Unser Ziel ist es, eine einheitliche Liste aller Produkte dieser Fabriken zu erstellen und deren Namen in Großbuchstaben umzuwandeln.

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233343536
package com.example; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { List<Factory> factories = Arrays.asList( new Factory("SteelWorks", Arrays.asList("Drill", "Excavator", "Bulldozer")), new Factory("AutoParts", Arrays.asList("Carburetor", "Piston", "Transmission")), new Factory("ToolMakers", Arrays.asList("Screwdriver", "Wrench", "Hammer")) ); List<String> productList = factories.stream() .flatMap(factory -> factory.getProducts().stream()) // Flatten all product lists into a single stream .map(String::toUpperCase) // Convert product names to uppercase .toList(); // Collect results into a list System.out.println(productList); } } class Factory { private String name; private List<String> products; public Factory(String name, List<String> products) { this.name = name; this.products = products; } public List<String> getProducts() { return products; } }

Die Liste factories enthält mehrere Objekte vom Typ Factory, von denen jedes einen name und eine Liste von products besitzt. Da getProducts() eine Liste zurückgibt, würde ein Aufruf von stream() auf factories normalerweise einen Stream von Factory-Objekten liefern, was nicht benötigt wird.

Um die tatsächlichen Produktnamen zu extrahieren, wird flatMap(factory -> factory.getProducts().stream()) verwendet. Dadurch werden alle Produktlisten zu einem einzelnen, fortlaufenden Stream von String-Werten zusammengeführt.

Anschließend wendet map(String::toUpperCase) die Methode toUpperCase() auf jeden Produktnamen an, sodass alle Namen in Großbuchstaben vorliegen, bevor sie mit productList in toList() gesammelt werden.

Zusammenführen von Kollektionen zu einer

Wenn Daten als verschachtelte Kollektionen organisiert sind, hilft die Methode flatMap() , diese zu einem einzelnen Stream zusammenzuführen, was die weitere Verarbeitung erleichtert. Beispielsweise kann ein Array, das andere Arrays enthält, zu einem einzigen Array kombiniert werden.

Beispiel

Mehrere Produktionslinien, jede fertigt verschiedene Produkte an. Ziel ist es, eine einzelne Liste aller Produkte zu erhalten, die auf diesen Linien hergestellt wurden.

Main.java

Main.java

copy
12345678910111213141516171819202122
package com.example; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { // List of production lines with their products List<List<String>> productionLines = Arrays.asList( Arrays.asList("Tire", "Rim", "Shock Absorber"), Arrays.asList("Frame", "Tread", "Ball Joint"), Arrays.asList("Brakes", "Steering System") ); // Get a single list of all products manufactured in the factory List<String> allProducts = productionLines.stream() .flatMap(line -> line.stream()) // Convert each production line's product list into a stream .toList(); // Collect all products into a single list System.out.println(allProducts); } }

Dieser Code verwendet flatMap(), um verschachtelte Listen von Produkten aus verschiedenen Produktionslinien zu einer einheitlichen Stream zusammenzuführen.

Jede Produktionslinie, dargestellt als Liste von Produkten, wird in einen Stream von Elementen umgewandelt, der anschließend mit toList() in eine abschließende Liste gesammelt wird. Das Ergebnis ist eine einzelne Liste, die alle in der Fabrik hergestellten Produkte enthält.

1. Was bewirkt die Methode flatMap() in der Stream-API?

2. Was passiert bei der Verwendung von flatMap() mit verschachtelten Collections?

question mark

Was bewirkt die Methode flatMap() in der Stream-API?

Select the correct answer

question mark

Was passiert bei der Verwendung von flatMap() mit verschachtelten Collections?

Select the correct answer

War alles klar?

Wie können wir es verbessern?

Danke für Ihr Feedback!

Abschnitt 1. Kapitel 19

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 19
some-alt