[Java Silver] Zusammenfassung der Punkte im Zusammenhang mit Lambda-Ausdrücken

Was ist ein Lambda-Ausdruck?

Ein Mechanismus zum Zuweisen des Codes, den Sie ausführen möchten, zu einer Schnittstellestypvariablen, für die nur eine Methode implementiert werden muss.

Was ist eine funktionale Schnittstelle?

Eine funktionale Schnittstelle ist eine Schnittstelle mit nur einer Methode, die implementiert werden muss. Es wird als "Funktionstyp" bezeichnet, da für jeden Eingang ein Ausgang bestimmt wird.

Arten von Funktionsschnittstellen

Oberflächentyp Methoden, die implementiert werden müssen Charakteristisch
Consumer<T> void accept(T) Empfängt und verarbeitet Argumente. Argumente, die keine Ergebnisse zurückgebenVerbraucher
Supplier<T> T get() Geben Sie nur das Ergebnis zurück, ohne etwas zu erhaltenLieferant
Predicate<T> boolean test(T) Nehmen Sie ein Argument und bewerten Sie esDurchsetzungsvermögen
Function<T, R> R apply(T) Erhält ein Argument und den angegebenen Typ(R)Gibt das Ergebnis von zurückProzessor

Beispiel für eine funktionale Schnittstelle Referenz) Klasse für Java8-Lambda-Ausdruck ** - Die forEach-Methode der Schnittstelle java.util.List kann Lambda-Ausdruck vom Typ Consumer empfangen. ** Referenz) Liste der offiziellen Dokumentschnittstellen Offizielles Dokument ・ ForEach

Beispiel)

public static void main(String[] args){
   List<Integer> list = List.of(1,2,3);
   list.forEach((x) ->{System.out.println(x)}); //Empfängt und verarbeitet Argumente und gibt keine Werte zurück
}

** · Die toUpperCase-Methode ** der Klasse java.lang.String kann einen Lambda-Ausdruck vom Funktionstyp empfangen

Referenz Offizielles Dokument toUpperCase ()

Beispiel)

public static void main(String[] args){
   Function<String, String> func = (x) -> {return x.toUpperCase();}; //Nimmt ein Argument und gibt das Ergebnis des angegebenen Typs zurück
   System.out.println(func.apply("hello world"));
}

Wie schreibe ich einen Lambda-Stil


Basic

Funktionstyp Schnittstellentyp Variablenname = (Argument) -> {// Verarbeitung ** return **};

  Function<String, String> func = (x) -> { return x.toUpperCase(); }; 

<Wenn es ein Argument gibt, wird () weggelassen>

Funktionstyp Schnittstellentyp Variablenname = Argument-> {// Verarbeitung ** return **};

 Function<String, String> func = x -> { return x.toUpperCase(); }; 

<Wenn es nur einen Prozess gibt, wird {} weggelassen>

Funktionstyp Schnittstellentyp Variablenname = Argumente-> // Verarbeitung; ** * Ich kann keine Rückgabeerklärung schreiben! !! ** ** **

list.forEach( x -> System.out.println(x) ); 

Lambda-Typ Notizen

** [Das formale Argument des Lambda-Ausdrucks ist eine Konstante oder eine im Wesentlichen Konstante] **

-Beispiel eines Kompilierungsfehlers (von Java Silver Kuromoto)

void sample(){
  int i = 0;
  Supplier<Integer> foo = () -> i;    
 i++;   //Ich muss im Wesentlichen konstant sein
  System.out.println(foo.get());
}

** [Notieren Sie den Datentyp des Arguments] ** Deklarationen von Lambda-Ausdrucksvariablen können ** die Angabe von Datentypen auslassen **. Weil Sie den Typ des Arguments aus dem Typ der Funktionsschnittstelle ableiten können, die Sie zuweisen möchten.

Selbst wenn Sie eine Lambda-Ausdrucksvariable mit weggelassenem Argument und weggelassenem Typ schreiben, handelt es sich um eine neu definierte Variable. → ** Prüfen Sie, ob es sich mit einer vorhandenen Variablen im Bereich des Lambda-Ausdrucks überschneidet! !! ** ** **

-Beispiel für einen Kompilierungsfehler

final String val = "Hello World";
Consumer<String> func = (val) -> System.out.println(val); //Doppelter Name, verursacht durch val des Lambda-Ausdrucks und val der lokalen Variablen, Kompilierungsfehler

** [Umfang beachten] ** Der Lambda-Ausdruck ** scope ** deckt den gesamten Block ab, in den der Lambda-Ausdruck geschrieben ist

-Beispiel für einen Kompilierungsfehler

public class Main{
   public static void main(String[] args){
     Srting val = "A";  //Lokale Variable val im Bereich des Lambda-Ausdrucks
     Function f = (val) -> {  //Lambda-Ausdrucksvariable val
       System.out.println(val);
     };
   }
}

Zukünftige Aufgaben

Um ehrlich zu sein, verstehe ich den Lambda-Stil immer noch überhaupt nicht ... Ich möchte die folgende Seite über den Lambda-Mechanismus verstehen.

Kombinator für Informatik und Magie Y

Außerdem verstehe ich nicht wirklich, wann ich den Lambda-Ausdruck tatsächlich verwenden soll. Welche Methoden können Lambda-Ausdrücke akzeptieren? Ist es immer verfügbar, wenn einfache Prozesse geschrieben werden, die nicht wiederverwendet werden? Kann es nur von der Methode der Funktionsschnittstelle verwendet werden? Wie unterscheidet man es von einer Methode einer funktionalen Schnittstelle?

Es gibt viele Dinge, die ich nicht verstehe.

Recommended Posts

[Java Silver] Zusammenfassung der Punkte im Zusammenhang mit Lambda-Ausdrücken
[Java] Zusammenfassung, wie Lambda-Ausdrücke weggelassen werden
[Java Silver] Zusammenfassung der Zugriffsmodifikatorpunkte
[Java] Zusammenfassung der regulären Ausdrücke
[Java] Einführung in den Lambda-Ausdruck
Zusammenfassung der Kenntnisse, die zum Bestehen von Java SE8 Silver erforderlich sind
[Einführung in Java] Über Lambda-Ausdrücke
Zusammenfassung des Pakets [Java Silver Study]
Der Ursprung von Java-Lambda-Ausdrücken
Verwendung von Java-Lambda-Ausdrücken
Ich habe versucht, Java-Lambda-Ausdrücke zusammenzufassen
[java] Zusammenfassung des Umgangs mit char
Java-bezogene Zusammenfassung
[Java] [Maven3] Zusammenfassung der Verwendung von Maven3
[java] Zusammenfassung des Umgangs mit Zeichenketten
Verstehen Sie Java 8 Lambda-Ausdrücke
Über Java-Lambda-Ausdrücke
Erläutern Sie Java 8-Lambda-Ausdrücke
Zusammenfassung der Java-Unterstützung 2018
Zusammenfassung der guten Punkte und Vorsichtsmaßnahmen bei der Konvertierung der Java Android-Anwendung in Kotlin
Zusammenfassung der Punkte, über die ich mir bei der Migration von Java nach Kotlin Sorgen gemacht habe
Verwenden Sie Java-Lambda-Ausdrücke außerhalb der Stream-API
Zusammenfassung der Java-Kommunikations-API (1) Verwendung von Socket
Zusammenfassung der Java-Kommunikations-API (3) Verwendung von SocketChannel
Zusammenfassung der Java-Kommunikations-API (2) Verwendung von HttpUrlConnection
Zusammenfassung der Implementierung von Standardargumenten in Java
[Java11] Stream-Zusammenfassung - Vorteile von Stream -
[Java] Zusammenfassung der Operatoren (Operator)
Java8-Stream, Zusammenfassung des Lambda-Ausdrucks
Zusammenfassung der Grundlagen der Java-Sprache
Zusammenfassung der Java Math Klasse
[Java] Zusammenfassung der Steuerungssyntax
Zusammenfassung der Java-Fehlerverarbeitung
[Java] Zusammenfassung der Entwurfsmuster
[Java] Zusammenfassung der mathematischen Operationen
[Java Silver] Hinweise zu switch-Anweisungen
Java-Lambda-Ausdruck, der mit Comparator gelernt wurde
So lernen Sie Java Silver SE 8
[Für Anfänger] Zusammenfassung des Java-Konstruktors
[Java] Mit Arrays.asList () zu beachtende Punkte
Über Lambda, Stream, LocalDate von Java8
Straße nach Java SE 11 Silberakquisition
[Java] Geben Sie in stdin of Process ein
AtCoder 400 Punkte Algorithmus Zusammenfassung (Java Edition)
So übergeben Sie Oracle Java Silver
Zusammenfassung der objektorientierten Programmierung mit Java
Verstehe die Lambda-Formel ein wenig
Zusammenfassung der internen Rookie-Lernsitzung [Java]
So erstellen Sie eine Java-Kalenderzusammenfassung
Nennen Sie eine Gruppe regulärer Ausdrücke (Java)
Java SE8 Silber ~ Der Weg zum Pass ~
Verwendung der Submit-Methode (Java Silver)
Heutzutage Java Lambda Expressions und Stream API
Zusammenfassung anderer Änderungen als JEP von Java10
Zusammenfassung zum Schreiben von Anmerkungsargumenten
[Java] Persönliche Zusammenfassung der bedingten Anweisungen (grundlegend)
Zusammenfassung der Teilnahme am JJUG CCC 2019 Spring
Liste der empfohlenen Artikel zu Corda