Werbung
Wenn Sie ein Java-Programmierer sind und mehr über Java 8-Lambdas erfahren möchten, werden wir uns in diesem Artikel die Lambda-Syntax und -Verwendung genauer ansehen.
EIN Lambda-Ausdruck in Java ist eine prägnante Möglichkeit, eine Methode einer Klasse in einem Ausdruck auszudrücken. Es hat eine Liste von Parametern und einen Körper. Der Körper kann ein einzelner sein Ausdruck oder ein Block 10 Java-Kernkonzepte, die Sie beim Einstieg lernen solltenEgal, ob Sie eine grafische Benutzeroberfläche schreiben, serverseitige Software entwickeln oder eine mobile Anwendung mit Android verwenden, das Erlernen von Java ist für Sie von Vorteil. Im Folgenden finden Sie einige grundlegende Java-Konzepte, die Ihnen den Einstieg erleichtern. Weiterlesen . Es wird häufig verwendet, wenn eine Implementierung einer Schnittstelle erforderlich ist. Dieser Bedarf entsteht normalerweise, wenn eine Schnittstelle als Argument zum Aufrufen einer Methode erforderlich ist.
Einige einfache Lambda-Ausdrücke
Schauen wir uns einige einfache Beispiele für Lambda-Ausdrücke an.
Das Folgende ist ein Lambda-Ausdruck, der zwei Zahlen akzeptiert x und y und berechnet die Summe.
(int x, int y) -> x + y;
Löschen Sie die Parametertypen für eine übersichtlichere Darstellung:
(x, y) -> x + y;
Definieren Sie eine Funktion, die keine Parameter akzeptiert:
() -> 404;
Folgendes ist ebenfalls gültig, das keine Parameter akzeptiert und nichts zurückgibt:
() -> {}
Es sind keine Klammern erforderlich, die Parameter für einen einzelnen Parameter enthalten:
x -> x + 1.
Auch komplexere Codeblöcke sind möglich. Das folgende Lambda akzeptiert ein einzelnes Linie Parameter und führt eine Verarbeitung darauf durch. Beachten Sie, dass der Typ des Parameters aus dem umgebenden Kontext abgeleitet wird:
Zeile -> { String [] x = pattern.split (Linie); neuen Player zurückgeben (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4])); }
Saubere und präzise Codierung
Die Verwendung von Lambda-Ausdrücken hilft dabei, Ihren Code sauber und präzise zu gestalten. Um dies zu unterstützen, verwenden Java 8-Klassen Lambdas in großem Umfang.
Durchlaufen einer Liste oder eines Sets
Sammlungsklassen wie Liste, einstellen, Warteschlangeund solche implementieren die Wiederholbar Schnittstelle, die das Durchlaufen der Elemente erheblich erleichtert.
Deklarieren Sie eine Liste von Namen.
Liste names = Arrays.asList ("Joe", "Jack", "James", "Albert");
Schleife über die Liste ohne Lambda:
for (String name: names) {System.out.println (name); }
Mit Lambda kann die obige Schleife wie folgt geschrieben werden:
names.forEach (name -> System.out.println (name));
Mit Java 8-Methodenreferenzen kann das Obige noch präziser geschrieben werden als:
names.forEach (System.out:: println);
Über eine Karte schleifen
EIN Karte ist eine Zuordnung von Schlüsseln zu Werten. Das Durchlaufen einer Karte umfasst das Durchlaufen jeder Zuordnung (Schlüssel, Wert). Vergleichen Sie, wie Sie Lambdas für diese Situation verwenden können.
Definieren Sie zuerst eine Karte:
Karte map = new HashMap <> (); map.put ("Atlanta, Georgia", 110); map.put ("Austin, Texas", 115); map.put ("Baltimore, Maryland", 105); map.put ("Birmingham, Alabama", 99); map.put ("Boston, Massachusetts", 98);
Sie können diese Karte auf herkömmliche Weise durchlaufen:
für (Karte. Eintrag e: map.entrySet ()) {System.out.println (e.getKey () + "=>" + e.getValue ()); }
So können Sie mit Lambdas schnell und präzise dasselbe tun:
map.forEach ((k, v) -> System.out.println (k + "=>" + v));
Funktionsschnittstellen
Was ist der Rückgabetyp eines Lambda-Ausdrucks? Mit anderen Worten, was ist die Art von X. in der folgenden Aussage?
X x = a -> a + 1;
Der Rückgabetyp eines Lambda-Ausdrucks ist a funktionale Schnittstelle - eine Schnittstelle mit einer einzigen abstrakten Methode. Sie können einer Schnittstelle mit einer kompatiblen abstrakten Methode einen Lambda-Ausdruck zuweisen. Einige Beispiele unten.
Erstellen einer Multithread-Aufgabe
Erwägen Sie, eine Aufgabe für zu erstellen Ausführung in einem separaten Thread 4 Methoden zum Schreiben von Multithread-Code in JavaIn diesem Artikel vergleichen wir einige Optionen zum Schreiben von Multithread-Code in Java, damit Sie besser beurteilen können, welche Option für Ihr nächstes Java-Projekt verwendet werden soll. Weiterlesen - Sie müssen die Aufgabe als definieren Runnable Schnittstelle und implementieren die Lauf() Methode. Hier Runnable ist eine funktionale Schnittstelle.
Klasse MyTask implementiert Runnable {... public void run () {// implementiere deine Aufgabe hier System.out.println ("Wird jetzt in einem separaten Thread ausgeführt."); }... }
Sie können dann eine Instanz von erstellen Meine Aufgabe Klasse und verwenden Sie es, um einen neuen Ausführungsthread zu starten.
MyTask task = new MyTask (); Thread thread = neuer Thread (Aufgabe); thread.start ();
Mit einem Lambda wird der Prozess der Erstellung eines Runnable wird viel einfacher. Die obige Aufgabendefinition kann wie folgt umgeschrieben werden:
Runnable task = () -> System.out.println ("Wird jetzt in einem separaten Thread ausgeführt.");
Oder auch:
Thread thread = neuer Thread (() -> System.out.println ("Wird jetzt in einem separaten Thread ausgeführt.")); thread.start ();
Vergleich mit einem Komparator
Das Komparator ist eine funktionale Schnittstelle zum Vergleichen von Objekten eines bestimmten Typs. Es definiert eine einzelne abstrakte Methode namens vergleichen Sie() die mit einem Lambda-Ausdruck definiert werden kann.
Hier ist ein Lambda-Ausdruck, der ein erzeugt Komparator wird verwendet, um Zeichenfolgen ohne Berücksichtigung der Groß- und Kleinschreibung zu vergleichen.
Komparator cmp = (x, y) -> x.compareToIgnoreCase (y);
Einmal eine Instanz der Komparator Die funktionale Schnittstelle wurde erstellt und kann bei Bedarf wiederverwendet werden.
Hier sortieren wir eine Liste von Zeichenfolgen in aufsteigender Reihenfolge.
Liste names = Arrays.asList ("Joe", "Jack", "James", "Albert"); Collections.sort (Namen, cmp); names.forEach (System.out:: println); // druckt. Albert. Jack. James. Joe.
Die obige Liste ist sortiert. Wir können es jetzt mit dem suchen binäre Suche() Methode wie folgt:
System.out.println ("search (Joe):" + Collections.binarySearch (Namen, "Joe", cmp)); # druckt. Suche (Joe): 3.
Das Berechnen von Maximum und Minimum aus einer Liste ist auch mit Lambdas einfach.
Definieren Sie einige Daten:
Liste temps = Arrays.asList (110, 115, 105, 99, 98, 54, 109, 84, 81, 66, 72, 135, 115, 75, 82, 90, 88);
Verwenden Sie einen Lambda-Ausdruck, um den Komparator zu definieren:
Komparator cmpTemp = (x, y) -> Integer.compare (x, y);
Und drucken Sie das Maximum und Minimum:
System.out.println ("Max / Min"); System.out.println (Collections.max (temps, cmpTemp) + "/" + Collections.min (temps, cmpTemp));
Verwendung in der GUI-Programmierung
Lambda-Ausdrücke sind auch in der GUI-Programmierung zur Implementierung von Ereignishandlern äußerst nützlich. Hier ist ein Beispiel für die Verwendung eines Schaltflächenklick-Handlers.
JButton-Schaltfläche = neuer JButton ("Click Me"); button.addActionListener (e -> System.out.println ("Button geklickt!"));
Und das war ein kurzer Blick auf die Verwendung von Lambdas in Java 8.
Haben Lambdas Ihr Leben seit Java 8 erleichtert? Bitte erklären Sie in den Kommentaren unten.