[Java] Funktionsschnittstelle / Lambda-Ausdruck

Was ist ein Lambda-Ausdruck?

Wenn Sie den Lambda-Ausdruck nicht verwenden

public class MethodRefUnuse {
//Inhalt der Zeichenkette mit Klammer ausgeben
  public void walkArray(String[] data) {
    for (var value : data) {
      System.out.printf("[%s]\n", value);
    }
  }
}
//Geben Sie den Inhalt der Zeichenfolgenarray-Daten der Reihe nach aus
public class MethodRefUnuseBasic {

  public static void main(String[] args) {
    var data = new String[] { "Der Frühling ist Akebono", "Sommer ist Nacht", "Der Herbst ist Abenddämmerung" };
    var un = new MethodRefUnuse();
    un.walkArray(data); //[Der Frühling ist Akebono][Sommer ist Nacht][Der Herbst ist Abenddämmerung]
  }
}

Methodenreferenz

MethodRefUnuse.java


public class MethodRefUse {

//Ermöglichen Sie den Empfang der Verarbeitungsmethode von Array-Elementen per Methodenreferenz
  //In der Argumentausgabe"Verweisen Sie auf eine Methode, die ein Argument als String-Typ empfängt und den Rückgabewert void hat"Bestehen

  public void walkArray(String[] data, Output output) {
    for (var value : data) {
      output.print(value);
    }
  }
//Methode entsprechend dem Ausgabetyp (Zeichenkette in Klammer einschließen)
  //Der tatsächliche Status der in der Funktionsschnittstelle definierten Druckmethode ist die addQuote-Methode.
  static void addQuote(String value) {
    System.out.printf("[%s]\n", value);
  }
}

Output.java


//Ein Methodentyp, der ein Argument vom Typ String verwendet und einen ungültigen Methodentyp zurückgibt
@FunctionalInterface
public interface Output {
  void print(String str);
}

MethodRefUnuseBasic.java


public class MethodRefUseBasic {

  public static void main(String[] args) {
    var data = new String[] {"Der Frühling ist Akebono", "Sommer ist Nacht", "Der Herbst ist Abenddämmerung"};
    var u = new MethodRefUse();
    //Übergeben Sie einen Methodenverweis auf die walkArray-Methode
    u.walkArray(data, MethodRefUse::addQuote);
  }
}

Methode ersetzen

//Zählerklasse, die Zeichenfolgen zählt
public class Counter {
  private int result = 0;

  public int getResult() {
    return this.result;
  }

  public void addLength(String value) {
    this.result += value.length();
  }
}
public class CounterBasic {

  public static void main(String[] args) {
    var data = new String[] {"Der Frühling ist Akebono", "Sommer ist Nacht", "Der Herbst ist Abenddämmerung"};
    var u = new MethodRefUse();
    var c = new Counter();
    //Die addLength-Methode der Counter-Klasse fügt dem Ergebnisfeld die Zeichenfolgenlänge des Werts hinzu
    u.walkArray(data, c::addLength);
    System.out.println(c.getResult());
  }
}

Hier erscheint der Lambda-Stil

//Argument der walkArray-Methode Consumer-Schnittstelle
//Consumer ist eine No-Return-Methode, die ein Argument vom Typ T verwendet und einige Verarbeitungsschritte ausführt
import java.util.function.Consumer;

public class MethodLambda {

  public void walkArray(String[] data, Consumer<String> output) {
    for (var value : data) {
      output.accept(value);
    }
  }
}

public class MethodLambdaBasic {

  public static void main(String[] args) {
    var data = new String[] { "Der Frühling ist Akebono", "Sommer ist Nacht", "Der Herbst ist Abenddämmerung" };
    var ml = new MethodLambda();
    ml.walkArray(data, (String value) -> {
      System.out.printf("[%s]\n", value);
    });
  }
}

Lambda-Stil einfacher

Ordnungsgemäße Verwendung mit anonymer Klasse


import java.util.function.Consumer;

public class MethodLambdaBasic {

  public static void main(String[] args) {
    var data = new String[] { "Der Frühling ist Akebono", "Sommer ist Nacht", "Der Herbst ist Abenddämmerung" };
    var ml = new MethodLambda();

    ml.walkArray(data, new Consumer<String>() {
      @Override
      public void accept(String value) {
        System.out.printf("[%s]\n", value);
      }
    });

     ml.walkArray(data, (String value) -> System.out.printf("[%s]\n", value));
     ml.walkArray(data, (value) -> System.out.printf("[%s]\n", value));
     ml.walkArray(data, value -> System.out.printf("[%s]\n", value));
  }
}

Beispielmethode für das Lambda-Expressionssammlungsframework

** replaceAll-Methode **

//Extrahieren Sie nur die ersten 3 Zeichen und geben Sie 2 oder weniger Zeichen so aus, wie sie sind
import java.util.ArrayList;
import java.util.Arrays;

public class CollReplace {

  public static void main(String[] args) {
    var list = new ArrayList<String>(
        Arrays.asList("Neko", "Inu", "Niwatori"));
    list.replaceAll(v -> {
      if (v.length() < 3) {
        return v;
      } else {
        return v.substring(0, 3);
      }
    });
    System.out.println(list); //[Nek, Inu, Niw]
  }
}
//Fügen Sie dem Kartenwert das Schlüsselakronym hinzu
import java.util.HashMap;
import java.util.Map;

public class CollReplaceMap {

  public static void main(String[] args) {
    var map = new HashMap<String, String>(
      Map.of("cat", "Katze", "dog", "Inu", "bird", "Tori"));
    map.replaceAll((k, v) -> k.charAt(0) + v);
    System.out.println(map); //{cat=c Katze, dog=d Inu, bird=b Tori}
  }
}

** removeIf Methode **

//Löschen Sie alle Zeichenfolgen mit 5 oder mehr Zeichen
import java.util.ArrayList;
import java.util.Arrays;

public class CollRemove {

  public static void main(String[] args) {
    var list = new ArrayList<String>(
      Arrays.asList("Rose", "Tulpe", "Asagao", "Hyazinthe"));
    list.removeIf(v -> v.length() > 4);
    System.out.println(list); //[Rose",Asagao]
  }
}

** Berechnungsmethode **

import java.util.HashMap;
import java.util.Map;

//Fügen Sie dem Wert das erste Zeichen des Schlüssels hinzu (berechnen/computeIfPresent)
public class CollCompute {
  public static String trans(String key, String value) {
    return key.charAt(0) + value;
  }
//Setzen Sie den Schlüssel selbst auf den Wert (computeIfAbsent)
  public static String trans(String key) {
    return key;
  }

  public static void main(String[] args) {
    var map = new HashMap<String, String>(Map.of("orange", "Mandarine"));

//compute
      map.compute("orange", CollCompute::trans);
      map.compute("melon", CollCompute::trans);
      System.out.println(map); //{orange m o mikan, melon=mnull}

/*
computeIfPresent: Nur verarbeiten, wenn der Schlüssel vorhanden ist
    map.computeIfPresent("orange", CollCompute::trans);
    map.computeIfPresent("melon", CollCompute::trans);
    System.out.println(map); //{orange m o mikan}
*/

/*computeIfAbsent: Verarbeitet nur diejenigen, die keinen Schlüssel haben
    map.computeIfAbsent("orange", CollCompute::trans);
    map.computeIfAbsent("melon", CollCompute::trans);
    System.out.println(map); //{orange = orange, melon=melon}
*/
  }
}

Zusammenführungsmethode

//Verketten Sie durch doppelte Werte durch Kommas getrennte Werte
import java.util.HashMap;
import java.util.Map;

public class CollMerge {
    public static String concat(String v1, String v2) {
        if(v2 == "") {return null;}
        return v1 + "," + v2;
    }
    public static void main(String[] args) {
        var map = new HashMap<String, String>(Map.of("cat", "dreifarbige Katze"));
        map.merge("dog", "Pomera An", CollMerge::concat);
        map.merge("cat", "Persha", CollMerge::concat);
        map.merge("dog", "Pudel", CollMerge::concat);
        System.out.println(map); //{dog=Pomera An,Pudel, cat=dreifarbige Katze,Persha}

        //Join-Funktion(remap)Verwirft den Schlüssel selbst, wenn null zurückgegeben wird
        map.merge("cat", "", CollMerge::concat);
        System.out.println(map); //{dog=Pomera An,Pudel}
    }
}

Recommended Posts

[Java] Funktionsschnittstelle / Lambda-Ausdruck
[Java] Lambda-Ausdruck
[Java] Funktionsschnittstelle
Java Lambda Ausdruck
Informationen zur Java-Funktionsschnittstelle
Java-Standardfunktionstyp-Schnittstelle
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
Java8-Stream, Zusammenfassung des Lambda-Ausdrucks
Java (Schnittstelle)
[Java] -Schnittstelle
Java Basic Learning Content 9 (Lambda-Ausdruck)
Was ist ein Lambda-Ausdruck (Java)
Über die Java-Schnittstelle
Lassen Sie uns nun den Java-Lambda-Ausdruck rekapitulieren
Einführung der Funktionsschnittstelle
[Java] -Schnittstelle
Hallo Java Lambda
Über Schnittstelle, Java-Schnittstelle
Verwendung der Java-API mit Lambda-Ausdrücken
Java 8 startet jetzt ~ für jeden und Lambda-Ausdruck ~
Überdenken des Entwurfsmusters mit Java8 Lambda-Ausdruck & Stream - Befehlsmuster -
Aufrufbare Schnittstelle in Java
Java-Lernen (bedingter Ausdruck)
Ein Überprüfungshinweis zur Funktionsoberfläche
Quarkus rettet Java Lambda! ??
Verstehen Sie Java 8 Lambda-Ausdrücke
Über Java-Lambda-Ausdrücke
Einführung in den Lambda-Stil
Erläutern Sie Java 8-Lambda-Ausdrücke
Java-Lernnotiz (Schnittstelle)
Injektion von Java-Tabellenausdrücken
Zusammenfassung der regulären Ausdrücke von Java
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 -
Verwenden Sie Lambda-Ebenen mit Java
Zusammenfassung der erweiterten Vererbung, Schnittstelle -java
Weisen Sie Variablen Java8-Lambda-Ausdrücke zu und verwenden Sie sie erneut
Vererbung der JAVA-Lernverlaufsschnittstelle
Probieren Sie den Funktionstyp in Java aus! ①
Überprüfen Sie die private Methode der Java9-Schnittstelle
[Java] Einführung in den Lambda-Ausdruck
Was ist ein Lambda-Ausdruck?
Überdenken des Java8-Lambda-Ausdrucks- und Stream-Entwurfsmusters - Muster der Verantwortungskette -
Implementieren Sie eine funktionsähnliche schnelle Sortierung in Java
Greifen Sie mit Java auf die Netzwerkschnittstelle zu
Java-Lambda-Ausdruck, der mit Comparator gelernt wurde
Bis die Implementierung der Schnittstelle Lambda wird
[Einführung in Java] Über Lambda-Ausdrücke
Java und primäre Funktionen - jenseits funktionaler Schnittstellen -
Über Lambda, Stream, LocalDate von Java8