Die zweite Stufe. Es ist jetzt Lambda. Ich habe es bei der Arbeit nicht benutzt, deshalb verstehe ich es nicht wirklich Gottes Seite hier Ich habe versucht, mit Bezug auf zu studieren.
Vorerst habe ich das einfachste geschrieben.
/*Beispiel 1. Lassen Sie uns ein einfaches ohne Argumente vorerst verschieben*/
Runnable runner = () -> {
System.out.println("Erste Lambda-Zeremonie. Ich weiß nicht, was im Moment großartig ist.");
};
Thread t = new Thread(runner);
t.start();
Wenn ich das mache, bin ich mir nicht sicher, aber die Nachricht, die ich in der Standardausgabe geschrieben habe, wird auf der Konsole angezeigt. Es scheint als Argument-> Verarbeitung </ b> geschrieben zu sein. In diesem Beispiel gibt es kein Argument, es kommt also nicht heraus, aber wenn es ein Argument gibt,
(s) Typ weggelassen (Zeichenfolge s) Schreiben Sie sowohl den Typ als auch den Variablennamen s Schreiben Sie nur den Variablennamen
Sie können verschiedene Dinge tun. Es scheint, dass Sie bis zu () nur weglassen können, wenn es nur ein Argument gibt.
Wenn es nur ein Beispiel ist, wird es nicht herauskommen, also werde ich ein bisschen mehr versuchen.
/*Beispiel 2. Mit Argument*/
List<String> l = new ArrayList<>();
l.add("hello");
l.add("world");
//Ich habe versucht, es wie Lambda aussehen zu lassen
l.forEach(s -> {
System.out.println("loop:" + s);
});
Irgendwie sieht es aus wie Lambda (Mysterium). Wenn du rennst
loop:hello
loop:world
Wird rauskommen. Plötzlich erscheint ein Lambda-Ausdruck im Argument der forEach-Methode, und beim Schreiben zuerst? ?? ?? ?? Das Argument der forEach-Methode ist jedoch ein Standard-@FunctionalInterface namens Consumer. Es wäre schön zu denken, dass es die Implementierung dieses Verbrauchers beschreibt. (FunctionalInterface = Funktionsschnittstelle wird später beschrieben) So können Sie die Consumer-Implementierungsklasse richtig vorbereiten und so vorgehen.
/**
*Eine Klasse, die ConsumerIF implementiert.
* @author komikcomik
*
*/
public class ConsumerImpl implements Consumer<Object> {
@Override
public void accept(Object t) {
System.out.println("Ich habe Consumer implementiert:" + t);
}
}
Nennen Sie das so.
/*Beispiel 3. Wenn Sie Ihre eigene Funktionsschnittstelle verwenden, die Consumer implementiert. Es ist kein Lambda mehr*/
l.forEach(new ConsumerImpl());
Bei der Ausführung wird Folgendes angezeigt.
Ich habe Consumer implementiert:hello
Ich habe Consumer implementiert:world
Sie können das Gefühl genießen, den Lambda-Stil in Beispiel 2 zu verwenden (obwohl ich denke, Sie sollten ihn basierend auf dem Gefühl wählen, ihn zu verwenden). Wenn es sich nur um Beispiel 1 handelt, scheint es sich um eine Version mit einer anderen Schreibweise der anonymen Klasse zu handeln. Ich habe das Bild, das auf der Entwicklungsseite verwendet werden soll, nicht wirklich verstanden. Eine Java-Standardmethode, die eine funktionale Schnittstelle als Argument verwendet, wie in den Beispielen 2 und 3. Wenn es darum geht, eine Implementierung des Arguments IF zu schreiben, scheint es eine gute Verwendung dafür zu geben. Selbst wenn ich die Theorie verstehe, wird es einige Zeit dauern, bis ich mich daran gewöhnt habe.
Dies ist derjenige, der auf dem Weg herauskam. Ausführliche Informationen zu den Bedingungen finden Sie unter This God Site Eine Schnittstelle, in der nur eine abstrakte Methode definiert ist. Diese IF scheint ein Zuweisungsziel für Lambda-Ausdrücke und Methodenreferenzen zu sein (obwohl ich sie in meinem Beitrag noch nicht behandelt habe). Wenn Sie also Java 8-Elemente wie Lambda verstehen möchten, ist das Verständnis der funktionalen IF unerlässlich.
Wie ich geschrieben habe, sind die Bedingungen, um eine funktionierende IF zu werden, einfach, sodass Sie Ihre eigenen erstellen können, jedoch in Java 8 ・ Lieferant ・ ・ ・ Gibt einen Wert ohne Argument zurück -Konsument: Es gibt ein Argument und es wird kein Wert zurückgegeben (etwas wird getan). Die, die im vorherigen Beispiel herauskam. ・ Prädikat ・ ・ ・ Gibt mit Argumenten true / false zurück ・ Funktion ・ ・ ・ Gibt einen beliebigen Typ mit einem Argument zurück (einige sind für primitive Typen) Es scheint, dass es verschiedene Standardfunktions-IFs wie bietet Für Neulinge im Entwicklungsprojekt ist es möglicherweise besser, das bereits als Standard bereitgestellte zu wählen, als es selbst zu erstellen. Daher muss möglicherweise nicht "Was ist diese ursprüngliche funktionale IF" angegeben werden.