Dies ist die in Java 8 eingeführte Beschreibungsmethode. Die Stream-API [^ 1], die ebenfalls in Java 8 eingeführt wurde, basiert auf der Verwendung von Lambda-Ausdrücken. Daher scheint es vorteilhaft zu sein, Lambda-Ausdrücke zu lernen.
[^ 1]: Eine API für die Verarbeitung von Sammlungen wie Arrays und Listen, mit der Sie die Wertaggregation und Datenverarbeitung mit leicht verständlichem Code implementieren können.
Ein weiterer Vorteil der Verwendung von Lambda-Ausdrücken besteht darin, dass Sie das "Schreiben einer Funktionsschnittstelle mit anonymen Klassen" vereinfachen können.
Die grundlegende Methode zum Schreiben eines Lambda-Ausdrucks lautet wie folgt.
Schnittstellenname Objektname=Argument (kann mehrere empfangen)->wird bearbeitet;
Sie müssen den Typ des Arguments nicht angeben, da der Compiler die Typinferenz ausführt. ~~ Wenn es nur ein Argument gibt, müssen Sie nicht zurückkehren, das Argument () einschließen, den Prozess {} schreiben usw. ~~ ※Korrektur {} Und return kann weggelassen werden, wenn es in {} nur eine Anweisung gibt, die return ~ ist. Die Anzahl der Argumente spielt keine Rolle.
Eine anonyme Klasse ist eine lokale Klasse, die eine Schnittstelle implementiert und den Deklarationsteil weglässt. Mit Lambda-Ausdrücken können Sie präzise und klar schreiben, ohne anonyme Klassen zu verwenden.
Wenn Sie beispielsweise die folgende anonyme Klasse haben:
main.java
interface InterfaceTest{
//Abstrakte Methode
public String name(String name);
}
public class Main {
public static void main(String[] args) {
//Wie schreibe ich mit einer anonymen Klasse
InterfaceTest greeting = new InterfaceTest() {
//überschreiben
public String name(String name) {
return "Hello " + name;
}
};
System.out.println(greeting.name("momoji"));
}
}
Oben sieht es so aus, als würden Sie eine Instanz einer Schnittstelle erstellen, aber Sie erstellen tatsächlich eine Instanz einer anonymen Klasse mit einer Schnittstelle.
Ausführungsergebnis ↓
Hello momoji
Schreiben wir dies mit einem Lambda-Ausdruck um.
main.java
interface InterfaceTest{
//Abstrakte Methode
public String name(String name);
}
public class Main {
public static void main(String[] args) {
//Wie schreibe ich mit Lambda-Ausdruck
InterfaceTest greeting = (name) -> {
return "Hello " + name;
};
System.out.println(greeting.name("momoji"));
}
}
Der von der Begrüßungsmethode auszuführende Verarbeitungsinhalt ist in {} beschrieben. Es ist kürzer und es ist einfacher zu sehen, was Sie tun. Außerdem müssen Sie den Argumenttyp nicht mehr angeben.
Ausführungsergebnis ↓
Hello momoji
Java hat dieselben Eigenschaften wie die for-each-Anweisung, und es gibt eine erweiterte for-Anweisung. Es hat die Eigenschaft, die angegebene Verarbeitung für alle Elemente eines Arrays oder einer Liste durchzuführen.
Wie schreibe ich eine erweiterte for-Anweisung?
for (Datentyp Variablenname:Liste und Array){
wird bearbeitet;
...
}
Um alle Elemente der Liste der Reihe nach auszugeben, schreiben Sie die erweiterte for-Anweisung wie folgt.
main.java
main.java
class Main {
public static void main (String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
//Für Aussage erweitert
for(String l : list) {
System.out.println(l);
}
}
}
Im obigen Beispiel ① Definieren Sie eine String-Typ-Liste "Liste" (2) Verwenden Sie die Add-Methode, um die Liste nacheinander mit den Elementen "a", "b" und "c" zu füllen. (3) Geben Sie die Listenelemente einzeln mit der erweiterten for-Anweisung aus.
Ich mache das
Das Ausführungsergebnis ist wie folgt.
a
b
c
Dies kann mit Lambda-Ausdrücken und forEach-Anweisungen noch kürzer gemacht werden.
main.java
class Main {
public static void main (String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
//Für Aussage erweitert
// for(String l : list) {
// System.out.println(l);
// }
//Für jede Anweisung mit Lambda-Ausdruck
list.forEach(l -> System.out.println(l));
}
}
Ausführungsergebnis ↓
a
b
c
Ich konnte das, was ich schrieb, anpassen, indem ich 3 in einer Zeile trainierte. Dies kann mit "Methodenreferenzen" noch kürzer gemacht werden.
Dies ist auch eine aus Java 8 eingeführte Notation. Eine Methodenreferenz ist ein Mechanismus, mit dem Sie auf eine Methode als Argument der Methode verweisen können. Sie können vordefinierte Methoden ohne Argumente aufrufen.
Die Methodenreferenz ist wie folgt geschrieben.
Name der Klasse::Methodenname
Schreiben Sie nach dem Klassennamen "::" und den Namen der Methode, die Sie aufrufen möchten. Im Methodennamen ist kein () erforderlich.
Ich werde versuchen, es sofort mit dem Lambda-Typ zu kombinieren.
main.java
//Lambda-Ausdruck mit Methodenreferenz
list.forEach(System.out::println);
Ausführungsergebnis ↓
a
b
c
Die Kombination von Lambda-Ausdrücken und Methodenreferenzen hat es möglich gemacht, viel kürzer zu schreiben.