Heim  >  Artikel  >  Java  >  Einführung in die Lambda-Ausdruckssyntax in Java8

Einführung in die Lambda-Ausdruckssyntax in Java8

黄舟
黄舟Original
2017-09-19 10:39:381528Durchsuche

Wie wir alle wissen, ist der Lambda-Ausdruck eine neue Funktion in JAVA8. Er unterstützt Java und kann auch einfache „funktionale Programmierung“ durchführen. Der folgende Artikel führt Sie hauptsächlich in die relevanten Informationen zur Lambda-Ausdruckssyntax des Java8-Lernprogramms ein. Freunde, die diese benötigen, können darauf zurückgreifen.

Vorwort

Ich glaube, jeder weiß, dass Lambda-Ausdrücke in Java8 eingeführt wurden, wenn man Verhaltensweisen als verwendet Parameter eliminieren unnötige Klassendeklarationen rund um die äußere Schicht und machen den Code prägnanter.

Die Syntax des Lambda-Ausdrucks

Der Lambda-Ausdruck besteht aus drei Teilen: Parametern, -> und Funktionskörper. Tatsächlich kann der Funktionskörper ein Ausdruck oder eine Anweisung sein. Anweisungen sollten in {} eingeschlossen werden, Ausdrücke jedoch nicht.

Beispiel für einen Lambda-Ausdruck


(List<String> list) -> list.isEmpty() // 布尔类型表达式
() -> new Apple(10) // 创建一个新对象
(Apple a) -> { System.out.println(a.getWeight()); } // 使用一个对象的属性
(String s) -> s.length() // 选择或提取一个对象的属性
(int a, int b) -> a * b // 组合两个参数
(Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight()) // 比较两个对象

Verhaltensparametrisierung

Wie Sie sehen, konzentrieren sich Lambda-Ausdrücke darauf, Verhalten auszudrücken. Tatsächlich gab es bereits vor Java8 ähnliche Beispiele für Verarbeitungsverhalten als Parameter:


// java.util.Comparator
public interface Comparator<T> {
 public int compare(T o1, T o2);
}


inventory.sort(new Comparator<Apple>() {
 public int compare(Apple a1, Apple a2){
 return a1.getWeight().compareTo(a2.getWeight());
 }
});

oben Im Beispielsweise wird eine Comparator-Schnittstelle definiert und die Vergleichsmethode definiert. Das Listentypinventar definiert die Sortiermethode, die einen Komparator als Parameter verwendet. Bei Verwendung wird ein anonymes oder nicht anonymes Comparator-Objekt generiert, das die Vergleichsmethode implementiert, das spezifische Vergleichsverhalten angibt und dann das Comparator-Objekt als Parameter an die Sortiermethode übergibt. Die eigentliche Funktion besteht darin, das Vergleichsverhalten als Parameter an die Sortiermethode zu übergeben. Diese Idee und dieser Ansatz werden als „Verhaltensparametrisierung“ bezeichnet. Eine verwendete Methode (z. B. die Sortiermethode) kann mehreren Verhaltensweisen entsprechen. Wenn das Verhalten geändert werden muss, muss nur der Code geändert werden, der das Verhalten darstellt, und der Benutzer muss keine Änderungen vornehmen, was die Robustheit erhöht der Code.

Anonyme innere Klasse

Wie im obigen Beispiel ist ein Objekt vom Typ Comparator direkt neu, ohne eine Variable zum Speichern der Objektreferenz zu definieren wird mithilfe anonymer innerer Klassen aufgerufen. Bei anonymen inneren Klassen ist die Redundanz des Codes deutlicher zu erkennen, da Methoden nicht wiederverwendet werden können. Denn Sie müssen ein Objekt bei jeder Verwendung manuell neu erstellen und auch die Signatur der Vergleichsmethode schreiben, aber das Einzige, was wirklich nützlich ist, ist der Hauptteil der Vergleichsmethode. In Java 8 können diese Codes mithilfe von Lambda-Ausdrücken vereinfacht werden. Beispielsweise kann die Verwendung der oben genannten Sortiermethode wie folgt vereinfacht werden:


inventory.sort((Apple a1, Apple a2) -> a1.getWeight().compareTo(a2.getWeight() ) );

Beispiel für die Definition eines Threads:


Thread t = new Thread(new Runnable() {
 public void run(){
 System.out.println("Hello world");
 }
});

kann vereinfacht werden zu:


Thread t = new Thread(() -> System.out.println("Hello world"));

Beispiel für ein Klickereignis in GUI:


Button button = new Button("Send");
button.setOnAction(new EventHandler<ActionEvent>() {
 public void handle(ActionEvent event) {
  label.setText("Sent!!");
 }
 });

kann vereinfacht werden zu:


Button button = new Button("Send");
button.setOnAction((ActionEvent event) -> label.setText("Sent!!"));

Wie man sieht, sind Lambda-Ausdrücke prägnanter und ermöglichen Entwicklern, sich beim Lesen und Schreiben von Code stärker auf das definierte Verhalten zu konzentrieren.

Zusammenfassung

Dieser Artikel stellt die Syntax von Lambda-Ausdrücken vor, stellt Verwendungsszenarien von Lambda-Ausdrücken vor und nutzt die Vorteile von Lambda-Ausdrücken. Im nächsten Artikel erklären wir, wie man Lambda-Ausdrücke definiert und verwendet, sowie die besonderen Spezifikationen von Lambda-Ausdrücken in Java im Vergleich zu anderen Sprachen.

Zusammenfassung

Das obige ist der detaillierte Inhalt vonEinführung in die Lambda-Ausdruckssyntax in Java8. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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