Mit weniger mehr erreichen: Java 8 Lambda-Ausdrücke

Die Verwendung von Lambda-Ausdrücken kann Ihren Java-Code leichter lesbar, stärker und lesbarer machen.

Einer der Kritikpunkte an einer Programmiersprache ist die Anzahl der Anweisungen, die für eine bestimmte Verarbeitung geschrieben werden, und manchmal müssen Sie viel Code schreiben. Lambda-Ausdrücke haben dieses Problem in einigen Fällen gelöst und Java stärker und einfacher gemacht, wie es C# seit Jahren ist.

Lambda-Ausdrücke sind neu in Java SE 8, und dies sind die bemerkenswertesten Funktionen, die dieser Version hinzugefügt wurden. Lambda-Ausdrücke bieten eine klarere Möglichkeit, die Methoden und Schnittstellen darzustellen, die diese Ausdrücke verwenden. Lambda-Ausdrücke verbessern auch Java-Objektsammlungen, indem sie das Durchsuchen von Listen, Filtern und Extrahieren von Daten aus Sammlungen erleichtern. Leistungsmerkmale stärken Java in Multitasking-Umgebungen, die auf allen neuen modernen Computern verfügbar sind.

Programmierer befürchten, dass Lambda-Ausdrücke die objektorientierte Natur von Java mit dem Konzept der funktionalen Programmierung verschmutzen werden. Tatsächlich sind dies die gleichen Kritikpunkte, die die Sprache C# vor einigen Jahren betrafen, aber sie ist besser geworden als zuvor.

Lambda- und LINQ-Ausdrücke in C# und VisualBasic.Net

Lambda-Ausdrücke wurden C# und VB.Net hinzugefügt, hauptsächlich zur Unterstützung von LINQ (Language-Integrated Query). Lambda-Ausdrücke sind anonyme Funktionen, mit denen Sie baumähnliche Ausdrücke erstellen können. In C# können Sie einen Lambda-Ausdruck erstellen, indem Sie die Eingabeparameter in der Seite  links vom Lambda-Operator => und setzen Sie den Ausdruck oder den Befehlsblock auf die andere Seite. Der Ausdruck x=> x*x gibt einen Parameter mit dem Namen x an und gibt das Quadrat von x zurück. In VB.Net. In diesem Fall verwenden Sie anonyme Funktionen, um lambda.

LINQ ist eine Reihe von Features, die ebenfalls in Visual Studio 2008 eingeführt wurden und das Hinzufügen von Abfragen ermöglichten. LINQ ist nützlich für die Abfrage von SQL-Datenbanken, XML-Dokumenten, ADO.Net Datasets und .Net-Sammlungen, Dateien, Zeichenfolgen usw.

LINQ und Lambda-Ausdrücke sind in der C#-Community beliebt geworden. Es ist also auch möglich, dass dies für die Java.

Anonyme innere Klassen in Java

Anonyme innere Klassen in Java waren der erste Schritt in Richtung Lambda-Ausdrücke. Sie können sie verwenden, indem Sie die innere Klasse aufrufen, wie im folgenden Beispiel gezeigt:

JButton button = new JButton("test"); 
button.addActionListener(new ActionListener(){
@Override public void actionPerformed(ActionEvent e){
System.out.println("one click");
}
});
Die innere Klasse ActionListener  Der Schaltfläche wird eine innere Klasse hinzugefügt, die eine Methode actionPerformed() darin. Das spart uns ein bisschen Code, aber nicht zu viel.

Schnittstellen, die nur eine Methode definieren, werden in Java 8 als funktionale Schnittstellen bezeichnet. Lambda-Ausdrücke werden häufig mit funktionalen Schnittstellen und internen Klassen verwendet.

Lambda-Ausdruckssyntax in Java

Der Lambda-Operator in Java lautet -> . Wie C# fügt Java 8 Argumente an, wie in diesem Beispiel gezeigt:

(int x) -> x * x
Wir haben eine Variable deklariert x vom Typ Integer und wir möchten das Quadrat dieser Variablen zurückgeben x.

Betrachten wir diese drei Lambda-Ausdrücke:

(int x, int y) -> x + y 

() -> 36

(String s) -> { System.out.println(s); }
Betrachten Sie nun das Beispiel ActionListener previous with lambda:

JButton button = new JButton("test"); 
testButton.addActionListener(e -> System.out.println("ein Klick"));
Es ist klar, dass dieser Code kleiner und besser lesbar ist. Wir stellen auch fest, dass die innere Klasse ActionListener wurde zum Argument z.

Das Paket java.util.function

Das Paket java.util.function wurde in Java 8 hinzugefügt und enthält fünf Arten von funktionalen Schnittstellen:
  • Predicate: Eine Eigenschaft des übergebenen Objekts als Parameter.
  • Consumer: Eine Aktion, die mit dem übergebenen Objekt als Argument ausgelöst werden soll.
  • Function: Rendert ein einzelnes Ergebnis Y:   X-> Y
  • Provider: Enthält eine Instanz von X
  • Unary Operator: von X-> x
  • Binärer Operator von (X, X)-> x

Objektsammlungen in Java 8

Lambda-Ausdrücke können die Verwendung von Sammlungen in Java verbessern. Mit den verschiedenen Versionen wurden den Sammlungen Funktionen hinzugefügt, die sich sehr gut mit Lambda-Ausdrücken kombinieren lassen, wie z. B. das forEach auf beiden Schnittstellen gesetzt Iterator und Iterable.

Example:
Wir möchten eine List die die Liste der Schüler enthält und für die diese Klasse das Alter des Schülers hat.

List und = Student.createShortList(); 
Jetzt können wir ein Prädikat definieren, um aus List.

Predicate list = und -> et.getAge() >= 20; 
Schließlich können wir etwas mit unserer Auswahl machen:

aClass.doqlqthing(pl, list); 
Dies ist viel schneller als frühere Versionen von Java. Wenn Sie einen komplexeren Prozess durchführen möchten, ist es hilfreich, die Methode forEach():

et.forEach( e -> e.getName() ); 
Zusammenfassend lässt sich sagen, dass die Funktionen, die der Java-Sprache hinzugefügt wurden, ihr objektorientiertes Konzept in keiner Weise schwächen werden. Diese Funktionen machen die Sprache stark, reichhaltig und elegant.

References: