Eine kurze Einführung in Java 8 Lambdas
Wenn Sie ein Java-Programmierer sind und mehr über Java 8-Lambdas erfahren möchten, werden wir uns in diesem Artikel mit der Lambda-Syntax und deren Verwendung näher befassen.
EIN Lambda-Ausdruck In Java ist eine kurze Methode zum Ausdrücken einer Methode einer Klasse in einem Ausdruck. Es hat eine Liste von Parametern und einen Körper. Der Rumpf kann ein einzelner Ausdruck oder ein Block sein. 10 Grundlegende Java-Konzepte, die Sie beim Einstieg kennen lernen sollten 10 Grundlegende Java-Konzepte, die Sie beim Einstieg kennen lernen sollten Java zu lernen wird dir gut tun. Hier sind einige grundlegende Java-Konzepte, die Ihnen den Einstieg erleichtern. Weiterlesen . Sie wird häufig verwendet, wenn eine Implementierung einer Schnittstelle erforderlich ist. Diese Notwendigkeit tritt normalerweise auf, wenn eine Schnittstelle als Argument zum Aufrufen einer Methode erforderlich ist.
Einige einfache Lambda-Ausdrücke
Betrachten wir einige einfache Beispiele für Lambda-Ausdrücke.
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;
Es gilt auch das Folgende, das keine Parameter akzeptiert und nichts zurückgibt:
() ->
Es sind keine Klammern erforderlich, die Parameter für einen einzelnen Parameter einschließen:
x -> x + 1
Auch komplexere Codeblöcke sind möglich. Das folgende Lambda akzeptiert eine einzige Linie Parameter und führt einige Verarbeitungsschritte aus. Beachten Sie, dass der Typ des Parameters aus dem Umgebungskontext abgeleitet wird:
line -> String [] x = pattern.split (line); Neuen Spieler zurückgeben (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4]));
Saubere und prägnante Codierung
Die Verwendung von Lambda-Ausdrücken hilft dabei, Ihren Code sauber und prägnant zu gestalten. Um dies zu unterstützen, verwenden Java 8-Klassen ausgiebig Lambdas.
Durchlaufen einer Liste oder eines Sets
Sammelklassen wie Liste, einstellen, Warteschlange, und solche implementieren die Iterable Schnittstelle, die das Durchlaufen der Elemente erleichtert.
Deklarieren Sie eine Liste mit Namen.
Liste names = Arrays.asList ("Joe", "Jack", "James", "Albert");
Schleife über die Liste ohne Lambda:
for (Stringname: Namen) System.out.println (Name);
Mit Lambda kann die obige Schleife folgendermaßen geschrieben werden:
names.forEach (name -> System.out.println (name));
Mit Java 8-Methodenreferenzen kann das Obige noch knapper geschrieben werden als:
names.forEach (System.out :: println);
Über eine Karte schleifen
EIN Karte ist eine Zuordnung von Schlüsseln zu Werten. Beim Schleifen über eine Karte wird jedes (Schlüssel-, Wert-) Mapping wiederholt. 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 (Map.Entry 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));
Funktionale Schnittstellen
Was ist der Rückgabetyp eines Lambda-Ausdrucks? Mit anderen Worten, was ist der Typ 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 einen Lambda-Ausdruck mit einer kompatiblen abstrakten Methode zuweisen. Einige Beispiele unten.
Multi-Threaded-Task erstellen
Erwägen Sie das Erstellen einer Aufgabe zur Ausführung in einem separaten Thread. 4 Methoden zum Schreiben von Multithread-Code in Java 4 Methoden zum Schreiben von Multithread-Code in Java In diesem Artikel werden einige Optionen zum Schreiben von Multithread-Code in Java verglichen Sie können besser beurteilen, welche Option für Ihr nächstes Java-Projekt verwendet werden soll. Lesen Sie mehr - Sie müssen die Aufgabe als definieren Lauffähig Schnittstelle und implementieren die Lauf() Methode. Hier Lauffähig ist eine funktionale Schnittstelle.
class 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 Lauffähig wird viel einfacher. Die Aufgabendefinition kann wie folgt umgeschrieben werden:
Runable task = () -> System.out.println ("Wird jetzt in einem separaten Thread ausgeführt.");
Oder auch:
Thread thread = new Thread (() -> System.out.println ("Wird jetzt in einem separaten Thread ausgeführt.")); thread.start ();
Vergleich mit einem Komparator
Das Vergleicher ist eine funktionale Schnittstelle zum Vergleichen von Objekten eines bestimmten Typs. Es definiert eine einzige abstrakte Methode, die aufgerufen wird vergleichen Sie() die mit einem Lambda-Ausdruck definiert werden kann.
Hier ist ein Lambda-Ausdruck, der ein erstellt Vergleicher wird verwendet, um Zeichenfolgen unabhängig von der Schreibweise zu vergleichen.
Vergleicher cmp = (x, y) -> x.CompareToIgnoreCase (y);
Einmal eine Instanz der Vergleicher Die funktionale Schnittstelle wurde erstellt und kann bei Bedarf wiederverwendet werden.
Hier sortieren wir eine Liste von Strings 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 nach Ort 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 die Suche (Joe): 3
Das Berechnen von Maximum und Minimum aus einer Liste ist auch mit Lambdas einfach.
Einige Daten definieren:
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 Vergleicher zu definieren:
Vergleicher cmpTemp = (x, y) -> Integer.compare (x, y);
Und drucken Sie das Maximum und Minimum aus:
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 äußerst nützlich, um Event-Handler zu implementieren. Hier ist ein Beispiel für die Verwendung eines Button-Click-Handlers.
JButton-Schaltfläche = neue JButton ("Click Me"); button.addActionListener (e -> System.out.println ("Schaltfläche angeklickt!"));
Und das war ein kurzer Blick auf die Verwendung von Lambdas in Java 8.
Haben Lambdas Ihr Leben seit Java 8 erleichtert? Bitte erkläre es in den Kommentaren unten.
Erfahren Sie mehr über: Java.