Lassen Sie uns nun den Java-Lambda-Ausdruck rekapitulieren

Ich benutze normalerweise Skriptsprachen.

Ich hatte die seltene Gelegenheit, Java zu berühren Über Java-Lambda-Ausdrücke wusste ich nur wenig Obwohl es die Zeit der Veröffentlichung von Java 11 ist, werde ich es zur Bestätigung zusammenfassen.

1. Vor der Einführung des Lambda-Typs

Angenommen, Sie sind in einem großartigen Spieleentwicklungsteam. Ich werde für den Teil verantwortlich sein, der sich auf den Namen des Benutzers bezieht. In Zukunft wird sich der Titel des Hauptcharakters für jeden Charakter ändern, daher wurde ich mit der Entwicklung der API beauftragt.

Definiert die Schnittstelle, die für die Formatierung des Namens verantwortlich ist.

NameFormatter.java


interface NameFormatter {
  public abstract String format(String familyName, String firstName);
}

Die Implementierungsklasse und der Hauptausführungsteil sehen so aus.

Chanformatter.java


class ChanFormatter implements NameFormatter {
  @Override
  public String format(String familyName, String firstName){
    return firstName + "Chan";
  }
}

Main.java


class Main {
  public static void main(String[] args){
    String familyName = "Datum";
    String firstName = "Masamune";

    NameFormatter nf = new ChanFormatter();
    String formatted = nf.format(familyName, firstName);

    System.out.println("Hallo!" + formatted + "。");
    System.out.println("Ich fange ein tolles Spiel an!");
  }
}

Klicken Sie hier für das Ausführungsergebnis

Hallo! Masamune-Chan.
Ich fange ein tolles Spiel an!

Es ist vertraut.

Im Gegenteil, bereiten wir einen anderen Formatierer für den edlen Charakter vor.

DonoFormatter.java


class DonoFormatter implements NameFormatter {
  @Override
  public String format(String familyName, String firstName){
    return familyName + "Tono";
  }
}

Sie können den Namen einfach ändern, indem Sie einfach die neue Klasse im Hauptausführungsabschnitt ändern.

Main.java(diff)


     String familyName = "Datum";
     String firstName = "Masamune";
 
-    NameFormatter nf = new ChanFormatter();
+    NameFormatter nf = new DonoFormatter();
     String formatted = nf.format(familyName, firstName);
 
     System.out.println("Hallo!" + formatted + "。");
Hallo! Datum.
Ich fange ein tolles Spiel an!

1.1 Anonyme Klasse

Nehmen wir an, Sie haben es satt, ein großartiges Spieleentwicklungsteam zu haben. Dies liegt daran, dass es nicht möglich ist, Personalkosten für die Wartung einer so kleinen Klassengruppe aufzuwenden. Das Entwicklungsteam hat beschlossen, den Formatierer mithilfe einer anonymen Klasse zu implementieren.

Anstatt einzelne Dateien für eine Klasse dieser Größe zu erstellen Anonyme Klasse ist eine Funktion zum Definieren und Entsorgen vor Ort.

Mit der anonymen Klasse benötigen Sie nur die folgenden zwei Dateien:

Nameformatter.java


//Erneut veröffentlichen
//Das gleiche wie oben
interface NameFormatter {
  public abstract String format(String familyName, String firstName);
}

Main.java


class Main {
  public static void main(String[] args){
    NameFormatter chan = new NameFormatter(){
      @Override
      public String format(String familyName, String firstName){
        return firstName + "Chan";
      }
    };

    NameFormatter dono = new NameFormatter(){
      @Override
      public String format(String familyName, String firstName){
        return familyName + "Tono";
      }
    };

    String familyName = "Datum";
    String firstName = "Masamune";

    String formatted = chan.format(familyName, firstName);
    System.out.println("Hallo!" + formatted + "。");
    System.out.println("Ich fange ein tolles Spiel an!");
  }
}

Es ist eine Form, in der die Formatmethode mit der Variablen verknüpft ist.

2. Lambda-Typ

Übrigens ist es der Lambda-Ausdruck des Hauptthemas.

In einer Situation wie dieser Zeit Die einzige Methode, die die Klasse "NameFormatter" implementieren sollte, ist "Format". Daher können Sie nur die Formatmethode überschreiben. Ich halte es für überflüssig, jedes Mal mit dem öffentlichen String-Format (String familyName, String firstName) zu kopieren und einzufügen. Ich möchte, dass Sie dem Compiler mein Bestes geben.

Der Lambda-Stil ist eine Notation, die eine solche Anforderung erfüllen kann. Es kann wie folgt geschrieben werden.

Main.java


class Main {
  public static void main(String[] args){
    NameFormatter chan = (String familyName, String firstName) -> {
      return firstName + "Chan";
    };

    NameFormatter dono = (String familyName, String firstName) -> {
      return familyName + "Tono";
    };

    String familyName = "Datum";
    String firstName = "Masamune";

    String formatted = chan.format(familyName, firstName);
    System.out.println("Hallo!" + formatted + "。");
    System.out.println("Ich fange ein tolles Spiel an!");
  }
}

Ich konnte klar schreiben. das ist alles.

3. Das war's?

Das war's für den Lambda-Ausdruck. Der Lambda-Ausdruck selbst ist nur eine Abkürzung für eine anonyme Klasse, kein großes Thema.

Der Hauptkreis ist kein Lambda-Typ, sondern die folgenden zwei Punkte.

--Funktionsschnittstelle (Paket java.util.function)

Dieses Mal habe ich die ursprüngliche Schnittstelle namens "NameFormatter" verwendet. Es werden viele Schnittstellen bereitgestellt, die Lambda-Ausdrücke verwenden sollen. Eine davon ist java.util.function.Function <T, R>.

Darüber hinaus wurden viele Methoden, die für Funktionstypen wie "map" und "filter" üblich sind, als Java Stream-API hinzugefügt. Diese Methoden werden verwendet, indem die Schnittstelle von java.util.function als Argument übergeben wird.

4. Fazit

Lambda-Stil ist nicht beängstigend.

5. Eindrücke

Ich möchte die Stream-API reibungslos verwenden können

6. Referenz

Grundlegendes zu Java 8 Lambda Expressions-Qiita

Recommended Posts

Lassen Sie uns nun den Java-Lambda-Ausdruck rekapitulieren
[Java] Lambda-Ausdruck
Java Lambda Ausdruck
Java Neutral Lambda Tabellenausdruck 1
Variationen von Java-Lambda-Ausdrücken
Java 8 Lambda-Ausdruck Feature
Java Lambda Ausdruck Memo
Java Lambda Ausdruck [Notiz schreiben]
Java 8 studieren (Lambda-Ausdruck)
Überprüfen Sie java8 ~ Lambda Typ ~
Wieder Java-Lambda-Ausdruck
Java 8 startet jetzt ~ für jeden und Lambda-Ausdruck ~
[Java] Funktionsschnittstelle / Lambda-Ausdruck
Java8-Stream, Zusammenfassung des Lambda-Ausdrucks
Java Basic Learning Content 9 (Lambda-Ausdruck)
Was ist ein Lambda-Ausdruck (Java)
Der Ursprung von Java-Lambda-Ausdrücken
AWS Lambda (Lambda) Teil 1 mit Java startet jetzt
Lassen Sie uns Java studieren
[LeJOS] Lassen Sie uns den EV3-Motor mit Java steuern
Verwendung der Java-API mit Lambda-Ausdrücken
Hallo Java Lambda
Überdenken des Entwurfsmusters mit Java8 Lambda-Ausdruck & Stream - Befehlsmuster -
Übergeben Sie die im Java8-Lambda-Ausdruck filter () verwendeten Bedingungen als Parameter
[Java] Deklarieren wir die in der Schleife verwendeten Variablen in der Schleife [Variationen im Block]
[Für Anfänger] Verstehen Sie schnell die Grundlagen von Java 8 Lambda
[Java] Sortieren Sie die Liste mit Streams und Lambda-Ausdrücken
Verwenden Sie Java-Lambda-Ausdrücke außerhalb der Stream-API
Schnelles Lernen von Java "Einführung?" Teil 2 Schreiben wir den Prozess
[LeJOS] Lassen Sie uns den EV3-Motor mit Java fernsteuern
Erste Schritte mit älteren Java-Ingenieuren (Stream + Lambda)
Überdenken von Entwurfsmustern mit Java8-Lambda-Ausdrücken und Stream - Null-Objektmuster -
Überdenken des Java8-Lambda-Ausdrucks- und Stream-Entwurfsmusters - Muster der Vorlagenmethode -
Java-Lernen (bedingter Ausdruck)
Quarkus rettet Java Lambda! ??
Verstehen Sie Java 8 Lambda-Ausdrücke
Lassen Sie uns die Funktion verstehen!
Überprüfen Sie jetzt die Java-Anmerkungen
Über Java-Lambda-Ausdrücke
Ein Java-Benutzer hat vor einem Dutzend Jahren versucht, die Funktionen von Java8 (Lambda Style Edition) zu untersuchen.
Einführung in den Lambda-Stil
Erläutern Sie Java 8-Lambda-Ausdrücke
Lass uns mit Java kratzen! !!
Injektion von Java-Tabellenausdrücken
Zusammenfassung der regulären Ausdrücke von Java
Weisen Sie Variablen Java8-Lambda-Ausdrücke zu und verwenden Sie sie erneut
Erstellen wir eine Taschenrechner-App mit Java ~ Zeigen Sie das Anwendungsfenster an
Ich möchte die Java 8 DateTime-API (jetzt) langsam verwenden.
Die Idee von C # (Lambda-Ausdruck, für Satz) zu kauen
Überdenken des Java8-Lambda-Ausdrucks- und Stream-Entwurfsmusters - Muster der Verantwortungskette -
Tipps rund um das Beispiel, um Lambda von Java auf CodePipeline freizugeben