Java-Lambda-Ausdruck, der mit Comparator gelernt wurde

Ich werde einen Kommentar zu Java-Lambda-Ausdrücken schreiben.

Java Lambda Ausdruck

Erstens werden Lambda-Ausdrücke häufig in funktionalen Sprachen verwendet, um anonyme Funktionen zu beschreiben. Es wird beim Erstellen einer temporären Funktion verwendet, z. B. beim Übergeben einer Funktion an eine Funktion.

In Java gibt es keine Funktion (Methoden werden immer in Klassen definiert). Daher verhalten sich Java-Lambda-Ausdrücke wie "Erstellen und Übergeben einer Instanz einer Schnittstelle mit einer einzelnen abstrakten Methode". Es ist auf eine einzelne Methode beschränkt, da ein Lambda-Ausdruck nur einen Ausdruck beschreiben kann und eine Schnittstelle mit mehreren Methoden nicht den Ausdruck der Methode bestimmt.

Als Beschreibungsmethode


(Streit) -> {wird bearbeitet}

Schreiben. Klammern können weggelassen werden, wenn nur ein Argument oder eine Aktion vorhanden ist.

Schauen wir uns als konkretes Beispiel die Sortiermethode "Sammlungen" an. Dies ist eine Methode, die nach dem ersten Argument "List" sortiert. Wenn Sie jedoch eine Instanz der "Comparator" -Schnittstelle an das zweite Argument übergeben, wird die "vergleichbar" -Methode verwendet, um die Sortierreihenfolge zu bestimmen. Wenn Sie beispielsweise eine Liste von Zeichenfolgen (strList) nach Zeichenlänge sortieren möchten, können Sie eine anonyme Funktion wie folgt schreiben.

Collections.sort(strList, new Comparator(){
    @Override
    public int compare(String s1, String s2) {
        return s1.length() - s2.length();
    }
})

Da die "Comparator" -Klasse eine Schnittstelle ist, in der nur die "compare" -Methode ** definiert ist, kann sie mit einem Lambda-Ausdruck wie folgt umgeschrieben werden.

List<String> strList = Arrays.asList("a","ccc","bb");
Collections.sort(strList, (s1, s2) -> s1.length() - s2.length());
System.out.println(strList); // [a, bb, ccc]

Funktionsschnittstelle und Methodenreferenzen

Die "Vergleichs" -Methode wird in der "Vergleichs" -Klasse wie folgt definiert.

comparing(Function<? super T,? extends U> keyExtractor);

Der Argumenttyp ist "Funktion <? Super T ,? Erweitert U>", was eine Art ** Funktionsschnittstelle ** ist. Die Funktionsschnittstelle ist eine Schnittstelle, die Lambda-Ausdrücke verwenden kann, und es stehen verschiedene Typen zur Verfügung. Dieses Mal gibt Function <? Super T ,? Extends U> an, dass die Instanz einen Typ mit dem Argument T und dem Rückgabewert U hat. T und U sind wie folgt definiert: <T,U extends Comparable<? super U>> Comparator<T>

T ist der Typ der zu vergleichenden Instanz. U ist die Art des zu vergleichenden Feldes. Daher bedeutet diese funktionale Schnittstelle, dass es sich um einen Ausdruck handelt, der Informationen U zum Vergleichen von Instanzen von T zurückgibt.

Wenn Sie die Verarbeitung von "Collections.sort" früher mit der "compare" -Methode schreiben, ist dies wie folgt.

Collections.sort(strList, comparing(s -> s.length()));

Der Teil s-> s.length () bedeutet, die Längenmethode der String-Typ-Instanz s aufzurufen, damit sie mit ** Methodenreferenz ** umgeschrieben werden kann. Eine Methodenreferenz ist eine Beschreibungsmethode, mit der der Aufruf einer Methode dieser Klasse für eine Instanz einfach geschrieben werden kann. Beschreiben Sie mit class name :: method name. Wenn Sie das vorherige Beispiel mit einer Methodenreferenz schreiben, sieht es wie folgt aus.

Collections.sort(strList, comparing(String::length));

Referenz (o1, o2) -> o1 --o2 Stoppt Zauber! - Verwendung von Composer in Java 8 JavaDoc:Comparator

Recommended Posts

Java-Lambda-Ausdruck, der mit Comparator gelernt wurde
Verstehen Sie Java 8 Lambda-Ausdrücke
Über Java-Lambda-Ausdrücke
Erläutern Sie Java 8-Lambda-Ausdrücke
[Java] Einführung in den Lambda-Ausdruck
[Einführung in Java] Über Lambda-Ausdrücke
Behandeln Sie Ausnahmen kühl mit Java 8-Lambda-Ausdrücken und der Stream-API
Überdenken von Entwurfsmustern mit Java8-Lambda-Ausdrücken und Stream - Builder-Muster -
Was ich mit Java Gold gelernt habe
Was ich mit Java Silver gelernt habe
Der Ursprung von Java-Lambda-Ausdrücken
Verwendung von Java-Lambda-Ausdrücken
Ich habe versucht, Java-Lambda-Ausdrücke zusammenzufassen
Heutzutage Java Lambda Expressions und Stream API
AWS Lambda (Lambda) Teil 1 mit Java startet jetzt
Behandeln Sie große JSON mit Java Lambda
Einfach mit regulären Java-Ausdrücken zu stolpern
Hallo Java Lambda
[Java] Lambda-Ausdruck
Java Lambda Ausdruck
Interagieren Sie mit der LINE Message API mit Lambda (Java)
[Java] Zusammenfassung, wie Lambda-Ausdrücke weggelassen werden
Verwendung des Java-Frameworks mit AWS Lambda! ??
Verwendung der Java-API mit Lambda-Ausdrücken
Installieren Sie Java mit Homebrew
Sortieren mit Java-Komparator
Wechseln Sie die Plätze mit Java
Installieren Sie Java mit Ansible
So stellen Sie Java mit Serverless Framework für AWS Lambda bereit
[Java Silver] Zusammenfassung der Punkte im Zusammenhang mit Lambda-Ausdrücken
[Java] Sortieren Sie die Liste mit Streams und Lambda-Ausdrücken
Java Neutral Lambda Tabellenausdruck 1
Quarkus rettet Java Lambda! ??
Verwenden Sie Java-Lambda-Ausdrücke außerhalb der Stream-API
Bequemer Download mit JAVA
Variationen von Java-Lambda-Ausdrücken
Schalten Sie Java mit direnv
Java 8 Lambda-Ausdruck Feature
Java Lambda Ausdruck Memo
Java-Download mit Ansible
Java Lambda Ausdruck [Notiz schreiben]
Lass uns mit Java kratzen! !!
Java 8 studieren (Lambda-Ausdruck)
Erste Schritte mit älteren Java-Ingenieuren (Stream + Lambda)
Überprüfen Sie java8 ~ Lambda Typ ~
Wieder Java-Lambda-Ausdruck
Erstellen Sie Java mit Wercker
Endian-Konvertierung mit JAVA
Veröffentlichen Sie regelmäßig Bild-Tweets auf Twitter mit AWS Lambda + Java
Viel Spaß beim Programmieren mit Lambda-Stil und flüssiger Oberfläche
Java-Lambda-Ausdrücke (Kotlin / JVM) sind nicht immer separate Instanzen
Erstellen Sie einen SlackBot mit AWS Lambda & API Gateway in Java
Erstellen Sie mit Gradle ein Java-Multiprojekt
Erste Schritte mit Java Collection
Java-Konfiguration mit Spring MVC
Grundlegende Authentifizierung mit Java 11 HttpClient
Experimentieren wir mit der Java-Inline-Erweiterung
Führen Sie Batch mit Docker-Compose mit Java-Batch aus
[Vorlage] MySQL-Verbindung mit Java