Java 8 startet jetzt ~ für jeden und Lambda-Ausdruck ~

Java 9 wurde ebenfalls veröffentlicht, aber ich bin mir bei Java 8 immer noch nicht sicher, daher werde ich es zusammenfassen.

forEach() In Java8 wurde die Methode forEach () zu List, Map, Arrays usw. hinzugefügt. Vor Java 7

for(String s : list) {
	System.out.println(s);
}

Und der Prozess, der 3 Zeilen verwendet

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

Sie können jetzt in einer Zeile schreiben.

Warum kann ich es so schreiben?

Funktionsschnittstelle

In Java8 wird eine Schnittstelle mit nur einer abstrakten Methode als funktionale Schnittstelle bezeichnet und kann als Lambda-Ausdruck übergeben werden.

FunctionalIf.java


@FunctionalInterface
public interface FunctionalIf {

	public String retStr(int number);
}

Die folgenden Methoden können jedoch enthalten sein ・ Statische Methode ・ Standardmethode -Überschreibung der öffentlichen Methode von java.lang.Object (toString () und equals ())

Das Hinzufügen der Annotation @ FunctionalInterface führt zu einem Kompilierungsfehler, wenn die Bedingungen nicht erfüllt sind, dies jedoch nicht erforderlich ist.

Lambda-Stil

Lambda-Ausdrücke sind Grammatiken, die in Java 8 eingeführt wurden. Sie können eine Funktionsschnittstelle mit der folgenden Syntax implementieren

(Argumente der zu implementierenden Methode) -> {wird bearbeitet}
FunctionalIf func = (int num) -> { return num +" * 2 = " + num*2;};

Dies allein ist ziemlich prägnant, kann aber weiter weggelassen werden.

Typ und () können weggelassen werden, wenn die zu implementierende Methode ein Argument hat

FunctionalIf func = num -> { return num +" * 2 = " + num*2;};

Da es ein Argument gibt, kann davon ausgegangen werden, dass num vom Typ int ist.

Wenn der Prozess ein einfacher Satz ist, können return und {} weggelassen werden

FunctionalIf func = num -> num +" * 2 = " + num*2;

Da es sich um einen einfachen Satz handelt, kann das Ergebnis des Satzes als Ausgabe abgeleitet werden.

Verwendung von Lambda-Stil

Am Ende hatte ich dieses Format

//Implementieren Sie eine funktionale Schnittstelle mit einem Lambda-Ausdruck
FunctionalIf func = num -> num +" * 2 = " + num*2;

//Verwenden Sie die implementierte Methode
System.out.println(func.retStr(1));
System.out.println(func.retStr(2));

Ausführungsergebnis


1 * 2 = 2
2 * 2 = 4

Wieder ForEach ()

Die forEach () -Methode in Java 8 kann in einer Klasse verwendet werden, die die Iterable-Schnittstellenmethode default void forEach (Consumer <? Super T> -Aktion) implementiert. https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Iterable.html#forEach-java.util.function.Consumer-

Das Argument "Consumer" ist eine funktionale Schnittstelle mit "void accept (T t)" (empfängt ein beliebiges Argument und gibt keinen Wert zurück). https://docs.oracle.com/javase/jp/8/docs/api/java/util/function/Consumer.html

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

Sie haben also die Implementierung von "Consumer" als Argument der forEach () -Methode in einem Lambda-Ausdruck übergeben.

Vorsichtsmaßnahmen bei der Verwendung des Lambda-Typs

Variabler Umfang

Variablen, die außerhalb des Lambda-Ausdrucks deklariert sind, können innerhalb des Lambda-Ausdrucks referenziert werden. Es kann jedoch nicht geändert werden.

String str = " item";
list.forEach(s -> {
  System.out.println(s + str); //Kann referenziert werden
  // str = " changed";  //Veränderung ist NG
});

Außerdem können außerhalb des Lambda-Ausdrucks deklarierte Variablen nicht in den Argumentnamen von Variablen verwendet werden (ein Kompilierungsfehler tritt auf).

Einschränkungen für Variablennamen

Sie können kein einzelnes _ im Variablennamen eines Lambda-Ausdrucksarguments verwenden.

Recommended Posts

Java 8 startet jetzt ~ für jeden und Lambda-Ausdruck ~
Java8 startet jetzt ~ Optional ~
Java 8 ~ Stream API ~ startet jetzt
[Java] Lambda-Ausdruck
Java Lambda Ausdruck
Lassen Sie uns nun den Java-Lambda-Ausdruck rekapitulieren
Java 8 startet jetzt ~ Datums- und Uhrzeit-API ~
Java Neutral Lambda Tabellenausdruck 1
Java 8 Lambda-Ausdruck Feature
Java Lambda Ausdruck Memo
Java Lambda Ausdruck [Notiz schreiben]
Einführung in den Lambda-Stil
Java 8 studieren (Lambda-Ausdruck)
Ich möchte für jedes Array mit Lambda-Ausdruck in Java
Überprüfen Sie java8 ~ Lambda Typ ~
Wieder Java-Lambda-Ausdruck
[Java] Funktionsschnittstelle / Lambda-Ausdruck
Java8-Stream, Zusammenfassung des Lambda-Ausdrucks
[Java] Einführung in den Lambda-Ausdruck
[Einführung in Java] Über Lambda-Ausdrücke
Java, Schnittstelle für Anfänger
Was ist ein Lambda-Ausdruck (Java)
Java, Arrays für Anfänger
Ich habe jetzt versucht, Java 8 zusammenzufassen
Verwendung von Java-Lambda-Ausdrücken
Ich habe versucht, Java-Lambda-Ausdrücke zusammenzufassen
Heutzutage Java Lambda Expressions und Stream API
Java-Implementierung zum Erstellen und Lösen von Labyrinthen
[Java] Wie man Dateien ausgibt und schreibt!
AWS Lambda (Lambda) Teil 1 mit Java startet jetzt
[Einführung in Java] Informationen zu Variablendeklarationen und -typen
Von Java nach C und von C nach Java in Android Studio
Verwandeln Sie sich von einer normalen Klasse in einen Lambda-Stil
[Java] Verwendung der FileReader-Klasse und der BufferedReader-Klasse
Zwei Möglichkeiten, einen Thread in Java + @ zu starten
Java switch Anweisung und break, Kotlin beim Ausdruck ...
[Java] Zusammenfassung, wie Lambda-Ausdrücke weggelassen werden
Versuchen Sie, Ruby und Java in Dapr zu integrieren
Laden Sie Notizen in Java in den Azure-Speicher hoch und laden Sie sie herunter
Ich möchte Java8 für jeden mit Index verwenden
Effektive Java 3rd Edition Kapitel 7 Lambda und Stream
Wie man Java SE8 Gold bekommt und studiert
So lösen Sie Ausdrucksprobleme in Java
So greifen Sie auf Java Private-Methoden und -Felder zu
Überdenken des Entwurfsmusters mit Java8 Lambda-Ausdruck & Stream - Befehlsmuster -
[Java] Verwendung der Kalenderklasse und der Datumsklasse
Übergeben Sie die im Java8-Lambda-Ausdruck filter () verwendeten Bedingungen als Parameter
[Java] forEach-Methode
Java und JavaScript
Hallo Java Lambda
Einführung in Java
Funktionen, die derzeit wahrscheinlich in Java 10 eingegeben werden
Konvertieren Sie Java Enum Enumeration und JSON von und nach Jackson
[Java] Arten von Kommentaren und wie man sie schreibt
[Java Silver] Zusammenfassung der Punkte im Zusammenhang mit Lambda-Ausdrücken
[Java] Sortieren Sie die Liste mit Streams und Lambda-Ausdrücken
[Inhouse-Lernsitzung] Java-Grundlagen - Lambda-Ausdruck und Stream-API - (13.07.2017)
[Java] Konvertieren Sie Zeichenfolgen in Groß- / Kleinschreibung (AOJ⑨ - Swap in Groß- / Kleinschreibung)