Heim > Java > javaLernprogramm > Beherrschen von Lambda-Ausdrücken in Java Ein umfassender Leitfaden

Beherrschen von Lambda-Ausdrücken in Java Ein umfassender Leitfaden

Patricia Arquette
Freigeben: 2024-11-03 07:41:03
Original
185 Leute haben es durchsucht

Einführung in Lambda-Ausdrücke in Java

Obwohl viele neue Java-Versionen veröffentlicht wurden, bleibt Java 8 aufgrund seiner leistungsstarken und transformativen Funktionen eine der am weitesten verbreiteten Versionen. Lambda-Ausdrücke, die in Java 8 eingeführt wurden, erfreuen sich besonders großer Beliebtheit, da sie Java prägnanter und effizienter machen, indem sie funktionale Programmierung ermöglichen. Mit dieser Funktion können Entwickler ausführliche anonyme innere Klassen durch eine optimierte Syntax ersetzen und so den Code besser lesbar und wartbar machen.

In diesem Leitfaden untersuchen wir, wie Lambda-Ausdrücke Code vereinfachen, die Datenverarbeitung in Sammlungen verbessern und Java-Entwicklern das Schreiben moderner, leistungsstarker Anwendungen ermöglichen.

Mastering Lambda Expressions in Java A Comprehensive Guide

Lambda-Ausdrücke verstehen: Die Grundlagen

Im Kern ist ein Lambda-Ausdruck eine Möglichkeit, eine einzelne abstrakte Methode einer funktionalen Schnittstelle in einer viel einfacheren Syntax darzustellen. Diese Funktion steht im Einklang mit dem Single Abstract Method (SAM)-Konzept, das es ermöglicht, Schnittstellen mit einer einzelnen nicht implementierten Methode als Lambda-kompatibel zu behandeln.

Lambda-Syntax:
Ein Lambda-Ausdruck besteht normalerweise aus drei Teilen:

  1. Parameterliste – Die für die Funktion erforderlichen Eingabewerte.
  2. Pfeilzeichen (->) – Trennt die Parameter vom Funktionskörper.
  3. Body – Der Codeblock, der die Operation ausführt. Dabei kann es sich um einen Ausdruck oder einen Codeblock in geschweiften Klammern handeln.
(parameters) -> expression
(parameters) -> { statements; }
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Beispiele für Lambda-Ausdrücke:

  • Ein einfacher Lambda-Ausdruck, der zwei ganze Zahlen annimmt und deren Summe zurückgibt:
  (int x, int y) -> x + y
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
  • Ein Lambda-Ausdruck, der eine einzelne Zeichenfolge annimmt und ausgibt:
  (String message) -> System.out.println(message)
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die Syntax von Lambda-Ausdrücken in Java ist sowohl flexibel als auch intuitiv und ermöglicht Entwicklern die Wahl zwischen einem prägnanten, einzeiligen Format oder einem detaillierteren Block, wenn mehrere Codezeilen benötigt werden.


Wie Lambda-Ausdrücke Java-Code vereinfachen

Vor Java 8 waren für die Implementierung von Schnittstellen wie Runnable oder Comparator anonyme innere Klassen erforderlich. Lambda-Ausdrücke optimieren diesen Prozess, indem sie Boilerplate-Code durch einen funktionaleren Stil ersetzen. Hier ist ein Vergleich, wie ein Lambda-Ausdruck häufige Aufgaben vereinfacht:

Beispiel 1: Verwendung von Lambda-Ausdrücken mit Runnable

Stellen Sie sich eine einfache Runnable-Implementierung vor. Die Verwendung einer anonymen inneren Klasse würde wie folgt aussehen:

Runnable r1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello world one!");
    }
};
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Mit Lambda Expressions kann dieser Code wie folgt vereinfacht werden:

(parameters) -> expression
(parameters) -> { statements; }
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Lambda-Ausdrücke mit gemeinsamen Funktionsschnittstellen

Java 8 führt eine Reihe vordefinierter Funktionsschnittstellen im Paket java.util.function ein. Diese Schnittstellen wie Prädikat, Funktion, Verbraucher und Lieferant bilden eine Grundlage für Lambda-Ausdrücke und ermöglichen Entwicklern die Nutzung funktionaler Programmierprinzipien.

  1. Prädikat – Stellt eine Bedingung dar, die je nach Eingabe wahr oder falsch zurückgibt.
  2. Funktion – Akzeptiert ein Argument und erzeugt ein Ergebnis.
  3. Verbraucher – Führt eine Aktion für eine einzelne Eingabe aus, ohne ein Ergebnis zurückzugeben.
  4. Lieferant – Stellt eine Ausgabe bereit, ohne Eingaben zu übernehmen.

Durch die Verwendung dieser Schnittstellen mit Lambda-Ausdrücken können Java-Entwickler Vorgänge ausführen, die nicht nur präzise, ​​sondern auch hochgradig wiederverwendbar sind.


Reale Anwendungsfälle für Lambda-Ausdrücke

Um Lambda-Ausdrücke in Aktion zu sehen, gehen wir einige Szenarien durch, die zeigen, wie sie die ausführliche Syntax ersetzen, allgemeine Vorgänge rationalisieren und die Lesbarkeit verbessern können.


Ausführbares Lambda-Beispiel

Die Runnable-Schnittstelle in Java stellt eine Aufgabe dar, die von einem Thread ausgeführt werden kann. Die Klasse muss eine Methode ohne Argumente namens run definieren. So vereinfacht ein Lambda-Ausdruck eine Runnable-Implementierung.

Laufbar mit anonymer innerer Klasse:

  (int x, int y) -> x + y
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Laufbar mit Lambda-Ausdruck:

  (String message) -> System.out.println(message)
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die Verwendung von Lambda-Ausdrücken reduziert fünf Codezeilen auf eine und zeigt, wie sie Java-Code vereinfachen können.


Komparator-Lambda-Beispiel

Die Comparator-Schnittstelle wird häufig zum Definieren der Sortierlogik für Sammlungen verwendet. Mit Lambda Expressions wird die Definition benutzerdefinierter Sortierkriterien prägnanter und intuitiver.

Komparator zum Sortieren einer Liste von Personen nach Nachnamen:

Runnable r1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello world one!");
    }
};
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Lambda-Ausdrücke erleichtern den Wechsel zwischen Sortierreihenfolgen, indem sie die Vergleichslogik ändern, z. B. für absteigende Reihenfolge:

Runnable r2 = () -> System.out.println("Hello world two!");
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dieser Ansatz ist besonders nützlich in Anwendungen, die eine dynamische Sortierung erfordern, sodass Entwickler Sortierkriterien basierend auf Benutzereingaben oder anderen Bedingungen einfach austauschen können.


Lambda-Ausdrücke mit Ereignis-Listenern verwenden

In der GUI-Programmierung werden Ereignis-Listener häufig zur Verarbeitung von Benutzeraktionen verwendet. Traditionell waren anonyme innere Klassen erforderlich, was zu einem langen Code führte. Lambda-Ausdrücke bieten jedoch eine sauberere Möglichkeit, diese Listener zu implementieren.

ActionListener mit anonymer innerer Klasse:

Runnable r1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("Running with anonymous inner class");
    }
};
r1.run();
Nach dem Login kopieren
Nach dem Login kopieren

ActionListener mit Lambda-Ausdruck:

(parameters) -> expression
(parameters) -> { statements; }
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Lambda-Ausdrücke ermöglichen es Entwicklern, ActionListener direkt in einer einzigen Zeile zu implementieren, was die Lesbarkeit verbessert und den Boilerplate-Code reduziert.


Erweiterter Anwendungsfall: Filtern mit Prädikaten

Ein häufiges Szenario in Softwareanwendungen ist das Filtern von Daten basierend auf mehreren Kriterien. In Java kann dies effektiv gehandhabt werden, indem Lambda-Ausdrücke mit der Predicate-Schnittstelle kombiniert werden, was eine dynamische Filterung von Sammlungen ermöglicht.

Betrachten Sie eine Liste von Personenobjekten, in der wir nach verschiedenen Kriterien wie Alter und Geschlecht filtern möchten.

Definieren einer prädikatbasierten Suchkriterienklasse:

  (int x, int y) -> x + y
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Die SearchCriteria-Klasse kapselt allgemeine Bedingungen zum Filtern von Listen und ermöglicht so Flexibilität bei der Anwendung verschiedener Filter auf eine einzelne Sammlung.

Verwendung der Kriterien beim Filtern:

  (String message) -> System.out.println(message)
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Dieser Ansatz macht mehrere for-Schleifen überflüssig und bietet eine sauberere, wiederverwendbare und wartbarere Lösung.

Mastering Lambda Expressions in Java A Comprehensive Guide

Stream-API und Sammlungen mit Lambda-Ausdrücken

Die Stream-API von Java 8 revolutioniert die Art und Weise, wie Sammlungen verarbeitet werden, insbesondere mit Lambda-Ausdrücken, die eine effiziente Datenfilterung, -transformation und -aggregation ermöglichen. Streams ermöglichen eine verzögerte Verarbeitung, bei der Daten nur bei Bedarf verarbeitet werden, wodurch die Leistung bei großen Datenmengen verbessert wird.

Schleife mit forEach

Die forEach-Methode in der Stream-API bietet eine Alternative zur herkömmlichen for-Schleife und ermöglicht die Anwendung von Lambda-Ausdrücken auf jedes Element in einer Sammlung. Hier ist ein Beispiel, das eine Liste von Person-Objekten durchläuft.

Runnable r1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello world one!");
    }
};
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Methodenreferenzen verwenden:
Für Fälle, in denen eine vorhandene Methode wiederverwendet werden kann, erlaubt Java Methodenreferenzen, eine Abkürzung, die die Lesbarkeit verbessert.

Runnable r2 = () -> System.out.println("Hello world two!");
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Filtern, Zuordnen und Sammeln

Die Stream-API ermöglicht die Verkettung von Vorgängen, sodass Entwickler Ergebnisse in einer einzigen Anweisung filtern, zuordnen und sammeln können.

Beispiel: Filtern und Sammeln:

Runnable r1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("Running with anonymous inner class");
    }
};
r1.run();
Nach dem Login kopieren
Nach dem Login kopieren

Dieser Code filtert nur männliche Personen im Alter von 18 bis 25 Jahren anhand der in der SearchCriteria-Klasse definierten Kriterien.

Mapping und Transformation mit Karte:
Die Map-Methode transformiert jedes Element in einer Sammlung, beispielsweise durch Extrahieren oder Ändern von Eigenschaften.

Runnable r2 = () -> System.out.println("Running with Lambda Expression");
r2.run();
Nach dem Login kopieren

Karte für Berechnungen verwenden:
Die Methoden „mapToInt“ und „mapToDouble“ sind hilfreich für numerische Berechnungen.

(parameters) -> expression
(parameters) -> { statements; }
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Faulheit und Eifer in Streams verstehen

Streams unterstützen Lazy- und Eage-Operationen, wobei Lazy-Operationen (z. B. Filter) nur bei Bedarf angewendet werden. Diese Faulheit optimiert die Leistung, indem nur die notwendigen Elemente verarbeitet werden.

  1. Lazy Operations: Wird nur angewendet, wenn eine Terminaloperation (wie Sammeln) erreicht wird.
  2. Eager Operations: Wird sofort für alle Elemente ausgeführt und häufig für Aggregationen verwendet.

Beispiel für Lazy Evaluation:

  (int x, int y) -> x + y
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Es werden nur Personen verarbeitet, die älter als 30 Jahre sind, und Nachnamen werden gedruckt, was eine verzögerte Filterung zeigt.


Parallele Verarbeitung mit Streams

Java’s parallelStream-Methode verteilt Aufgaben auf mehrere Threads und bietet so erhebliche Leistungssteigerungen für große Datenmengen.

Beispiel für einen parallelen Stream:

  (String message) -> System.out.println(message)
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Parallele Verarbeitung teilt die Arbeitslast auf und beschleunigt Vorgänge an Sammlungen für rechenintensive Aufgaben.

Mutation und Sammeln von Ergebnissen

Da Streams von Natur aus unveränderlich sind, müssen Ergebnisse gesammelt werden, um sie beizubehalten. Die Collect-Methode bietet eine Möglichkeit, die Ergebnisse eines Stream-Vorgangs zu aggregieren und aufzubewahren.

Beispiel:

Runnable r1 = new Runnable() {
    @Override
    public void run() {
        System.out.println("Hello world one!");
    }
};
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Hier werden gefilterte Ergebnisse in einer Liste zur weiteren Verarbeitung gespeichert, sodass Entwickler komplexe Datenflüsse strukturiert verwalten können.

Mastering Lambda Expressions in Java A Comprehensive Guide

Fazit: Die Macht von Lambda-Ausdrücken in Java 8

Die Lambda-Ausdrücke von Java 8 stellen in Kombination mit der Stream-API einen großen Wandel hin zur funktionalen Programmierung dar und machen den Code prägnanter, ausdrucksvoller und wartbarer. Durch das Ersetzen anonymer innerer Klassen, die Verbesserung der Sammlungsverarbeitung und die Unterstützung paralleler Vorgänge sind Lambda-Ausdrücke zu einem Eckpfeiler für das Schreiben moderner Java-Anwendungen geworden.

Korrekturen oder Ergänzungen zu diesem Beitrag sind willkommen.

Danke fürs Lesen!

Runnable r2 = () -> System.out.println("Hello world two!");
Nach dem Login kopieren
Nach dem Login kopieren
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonBeherrschen von Lambda-Ausdrücken in Java Ein umfassender Leitfaden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage