Funktionale Programmierung ist ein weit verbreiteter Ansatz in der modernen Softwareentwicklung. Java, eine Sprache, die sowohl objektorientierte als auch funktionale Programmierung unterstützt, führte in seiner 8. Version Streams und Lambdas ein. Mit diesen Funktionen können Entwickler funktionale Stile auf Sammlungen anwenden und so den Betrieb von Sammlungen effizienter und sauberer gestalten.
Streams in Java
Streams in Java verwandeln eine Sammlung in einen Fluss von Elementen. Sie ermöglichen Entwicklern die Durchführung funktionaler Vorgänge an Sammlungen wie Zuordnen, Filtern und Reduzieren. Streams werden am besten für Vorgänge verwendet, die die Transformation, Aggregation oder Filterung von Daten beinhalten.
Ein Beispiel für die Verwendung von Streams ist das Sortieren einer Liste von Namen in alphabetischer Reihenfolge. Wir können eine Liste mit Namen erstellen und diese dann mithilfe von Streams wie unten gezeigt sortieren:
List
Namen.stream().sorted().forEach(System.out::println); //Ausgabe: David, Emily, John, Mary, Tom
Hier haben wir einen Stream mit der Methode stream() für die Liste erstellt. Anschließend haben wir die Methode sorted() angewendet, um die Elemente im Stream in natürlicher Reihenfolge zu sortieren. Schließlich wird die Methode forEach() verwendet, um jedes Element im Stream zu drucken.
Lambdas in Java
Lambdas werden verwendet, um erstklassige Funktionen in Java zu definieren. Diese Funktionen können Elemente aus einem Stream konsumieren und Operationen an ihnen ausführen. Lambdas werden außerhalb einer Klasse definiert und können als Argumente an Funktionen übergeben werden.
Um Lambdas mit Streams verwenden zu können, müssen wir das Konzept funktionaler Schnittstellen verstehen. Dies sind Schnittstellen, die nur eine abstrakte Methode haben. Lambda-Ausdrücke können verwendet werden, um eine konkrete Implementierung für die abstrakte Methode einer funktionalen Schnittstelle bereitzustellen.
Sortieren Sie eine Liste von Namen mit Lambdas
Aufbauend auf dem obigen Beispiel sortieren wir die Namen mithilfe von Lambdas in absteigender Reihenfolge.
List
Namen.stream().sorted((a, b) -> b.compareTo(a)).forEach(System.out::println)); //Ausgabe: Tom, Mary, John, Emily, David
Hier haben wir einen Lambda-Ausdruck als Argument für die Methode sorted() verwendet. Diese Lambda-Funktion akzeptiert zwei Argumente (a und b) und vergleicht sie, wobei sie basierend auf dem Vergleich einen positiven, negativen oder Nullwert zurückgibt. Dadurch können wir die Elemente in absteigender Reihenfolge sortieren, indem wir die Methode „compareTo()“ für die Elemente verwenden.
Verwandeln Sie einen Stream wieder in eine Sammlung
In einigen Fällen möchten wir möglicherweise einen Stream wieder in eine Sammlung umwandeln, nachdem wir Vorgänge daran ausgeführt haben. Wir können dies mit der Methode „collect()“ tun, die ein Collector-Objekt als Argument akzeptiert.
List
.filter(name -> name.length() > 4) //Nur Namen mit einer Länge > 4 behalten
.collect(Collectors.toList()); //eine Liste gefilterter Namen zurückgeben
Die Methode „collect()“ verwendet eine funktionale Schnittstelle vom Typ „Collector“ und sammelt damit Elemente in einer Sammlung. Im obigen Beispiel haben wir die toList()-Methode aus der Collectors-Klasse verwendet, um eine Liste gefilterter Namen zu erstellen.
Andere Operationen an Streams
Neben dem Sortieren und Filtern gibt es noch andere Vorgänge, die an Streams durchgeführt werden können, wie z. B. Mapping, Reduzieren und Iteration. Diese Operationen ermöglichen es uns, die Elemente in einem Stream zu transformieren, zu reduzieren und zu iterieren.
Einen Zahlenstrom abbilden und reduzieren
Nehmen wir an, wir haben eine Liste mit Zahlen und möchten die Summe aller geraden Zahlen ermitteln. Wir können dies mit den Methoden „map()“ und „reduction()“ tun.
List
int sum = zahlen.stream()
.filter(num -> num % 2 == 0) //ungerade Zahlen herausfiltern
.map(num -> num * 2) //die geraden Zahlen verdoppeln
.reduce(0, (a, b) -> a b); //addiere alle Zahlen
Hier haben wir die Methode „map()“ verwendet, um die geraden Zahlen im Stream zu verdoppeln, und dann die Methode „reduce()“ verwendet, um alle Zahlen zu addieren. Das Ergebnis ist eine Summe aller geraden Zahlen in der Liste.
Wiederverwendungsvorgänge für Streams
In einigen Fällen müssen wir möglicherweise dieselbe Funktionsoperation für mehrere Streams verwenden. Um zu vermeiden, dass immer wieder derselbe Code geschrieben wird, können wir eine funktionale Schnittstelle erstellen und diese als Argument an die Methoden übergeben.
Nehmen wir das Beispiel der Sortierung einer Namensliste nach Nachnamen. Wir können eine Komparatorklasse erstellen, die die Comparator-Schnittstelle implementiert, und sie als Argument an die Methode sorted() übergeben.
statische Klasse LastNameComparator implementiert Comparator
@Override
public int vergleichen(String name1, String name2) {
String[] parts1 = name1.split(" ");
String lastName1 = parts1[parts1.length - 1];
String[] parts2 = name2.split(" ");
String lastName2 = parts2[parts2.length - 1];
return lastName2.compareTo(lastName1);
}
}
Namen.stream().sorted(new LastNameComparator()).forEach(System.out::println); //Ausgabe: Emily, David, John, Mary, Tom
Hier haben wir den LastNameComparator als Argument an die Methode sorted() übergeben, um die Namen nach Nachnamen zu sortieren.
Abschluss
Streams und Lambdas in Java bieten eine leistungsstarke und effiziente Möglichkeit, funktionale Operationen an Sammlungen durchzuführen. Sie ermöglichen Entwicklern das Schreiben von Code, der sauber, prägnant und wiederverwendbar ist. Durch das Verständnis der Konzepte von Streams und Lambdas können wir unsere allgemeinen Programmierfähigkeiten verbessern und effizienteren Code schreiben.
Eine effektive Methode zur Verbesserung Ihrer Java-Kenntnisse besteht darin, die neueste Java-Zertifizierung zu erwerben und die auf MyExamCloud verfügbaren 1Z0-830-Übungstests zu verwenden.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3