Java zum Spielen mit Function

Dieser Artikel wurde auch veröffentlicht in Ich habe eine Funktion höherer Ordnung in Go-Sprache geschrieben und damit gespielt. Dies ist eine Hommage an .com / _makanai / items / ca313c8e117da78154fa). Es macht nur Spaß (wie im Originalartikel). Wenn Sie also nach einer nützlichen Implementierung suchen, wird empfohlen, den Browser zurückzusetzen.

(Hinweis) Bitte beachten Sie, dass es möglicherweise seltsame Teile gibt, da diese mit der Mitternachtsspannung m (_ _) m geschrieben sind

Hauptthema

Da der Rückgabewert von hoge1 ~ 4 Function ist, können weitere Argumente übergeben werden.

//Nimmt Integer und gibt Integer zurück
Function<Integer, Integer> hoge1 = value -> value;
hoge1.apply(1); // return 1
//Nimmt Integer und gibt eine Funktion zurück, die Integer und Integer zurückgibt
Function<Integer, Function<Integer, Integer>> hoge2 = value -> (a -> value + a);
hoge2.apply(1).apply(2);    // return 3
///Nimmt Integer, nimmt Integer, nimmt Integer und gibt eine Funktion zurück, die Integer zurückgibt
Function<Integer, Function<Integer, Function<Integer, Integer>>> hoge3 = value -> (a -> (b -> value + a + b));
hoge3.apply(1).apply(2).apply(4);   // return 7
//Nimmt Integer, nimmt Integer, nimmt Integer, nimmt Integer und gibt eine Funktion zurück, die Integer zurückgibt
Function<Integer, Function<Integer, Function<Integer, Function<Integer, Integer>>>> hoge4 = value -> (a -> (b -> (c -> value + a + b + c)));
hoge4.apply(1).apply(2).apply(4).apply(8);  // return 15

Da das Argument von hoge5 ~ 7 ein Abschluss ist, ist es notwendig, den Prozess im Voraus zu bestehen. (Hoge5 ~ 7 hat den Rückgabewert von hoge1 ~ 4 verwendet, da das Argument eine Funktion ist.)

//Nimmt Integer und gibt eine Funktion zurück, die Integer nimmt, nimmt Integer und nimmt Integer und gibt eine Funktion zurück, die Integer nimmt und Integer zurückgibt
Function<Function<Integer, Integer>, Function<Integer, Function<Integer, Function<Integer, Integer>>>> hoge5 = hoge -> (a -> (b -> (c -> hoge.apply(a + b + c))));

hoge5.apply(hoge1).apply(1).apply(2).apply(4);  // return 7
hoge5.apply(hoge2.apply(1)).apply(2).apply(4).apply(8); // return 15
hoge5.apply(hoge3.apply(1).apply(2)).apply(4).apply(8).apply(16);   // return 31
hoge5.apply(hoge4.apply(1).apply(2).apply(4)).apply(8).apply(16).apply(32); // return 63
//Nehmen Sie Integer und nehmen Sie eine Funktion, die Integer nimmt und Integer zurückgibt, nehmen Sie Integer und nehmen Sie Integer und geben Sie eine Funktion zurück, die Integer nimmt und Integer zurückgibt
Function<Function<Integer, Function<Integer, Integer>>, Function<Integer, Function<Integer, Function<Integer, Integer>>>> hoge6 = hoge -> (a -> (b -> (c -> hoge.apply(a).apply(b + c))));

hoge6.apply(hoge2).apply(1).apply(2).apply(4);  // return 7
hoge6.apply(hoge3.apply(1)).apply(2).apply(4).apply(8); // return 15
hoge6.apply(hoge4.apply(1).apply(2)).apply(4).apply(8).apply(16);   // return 31
//Nehmen Sie Integer und nehmen Sie Integer Nehmen Sie eine Funktion, die Integer nimmt und Integer zurückgibt, nehmen Sie Integer und nehmen Sie Integer und geben Sie eine Funktion zurück, die Integer nimmt und Integer zurückgibt
Function<Function<Integer, Function<Integer, Function<Integer, Integer>>>, Function<Integer, Function<Integer, Function<Integer, Integer>>>> hoge7 = hoge -> (a -> (b -> (c -> hoge.apply(a).apply(b).apply(c))));

hoge7.apply(hoge3).apply(1).apply(2).apply(4);  // return 7
hoge7.apply(hoge4.apply(1)).apply(2).apply(4).apply(8); // return 15

Natürlich können Sie die Funktion, die der Rückgabewert ist, so wie sie ist haben. Ich übergebe eine Zahl, aber sie wird nicht berechnet

hoge7.apply(hoge3); // return Function
hoge7.apply(hoge3).apply(1);    // return Function
hoge7.apply(hoge3).apply(1).apply(2);   // return Function

Drehen Sie die Schleife und fügen Sie alles hinzu ... Wie Sie sehen können, wurde die Berechnung, die die for-Anweisung vor Java 8 verwendet hat! Es wird schläfrig ... w

int sum = IntStream.rangeClosed(1, 100).sum();    // return 5050

Nehmen Sie T und T und kehren Sie zurück T Nehmen Sie einen Verschluss, nehmen Sie T und nehmen Sie T und geben Sie T zurück (Bis morgen ... ww)


Drehen Sie die Schleife, um den Maximalwert zu erhalten (machen wir etwas mit der Stream-Verarbeitung ...)

Schließlich

Vielen Dank an diejenigen, die alles richtig gelesen haben. (Ich bin am Ende erschöpft, also mache ich es das nächste Mal wieder ...) Achten Sie darauf, den obigen Scheißcode nicht einzubetten, der für andere schwer in das eigentliche Produkt einzulesen ist.

Es ist schwer, sich an funktionale Programmierung zu gewöhnen, aber es macht Spaß, wenn man sie kennenlernt. Vorerst werde ich funktionale Programmierung mit Java machen und ein großartiges H-Buch lesen.

P.S Wo kann man einen Java-Lambda-Ausdruck am besten brechen ... (...?)

Recommended Posts

Java zum Spielen mit Function
Stellen Sie mit Java eine Verbindung zur Datenbank her
Stellen Sie mit Java eine Verbindung zu MySQL 8 her
Spielen Sie mit Java-Funktionsknoten, die Java mit Node-RED verwenden können
Java mit Ramen lernen [Teil 1]
[Java] Mit Arrays.asList () zu beachtende Punkte
Wagen Sie es, Kaggle mit Java herauszufordern (1)
Ich habe versucht, mit Java zu interagieren
Java, Arrays für Anfänger
Tweak Markdown mit Java Flexmark-Java
Ich möchte eine Funktion mit Kotlin und Java erstellen!
So kompilieren Sie Java mit VsCode & Ant
[Java] Fassen Sie zusammen, wie Sie mit der Methode equals vergleichen können
Verwendung von BootStrap mit Play Framework
Einführung in Algorithmen mit Java-Suche (Tiefenprioritätssuche)
Versuchen Sie, eine Anmeldefunktion mit Spring-Boot zu implementieren
Authentifizierungsfunktion mit Play Framework [Registrierung und Authentifizierung]
[Java] Einführung in Java
Post to Slack von Play Framework 2.8 (Java)
So implementieren Sie TextInputLayout mit Validierungsfunktion
[Verarbeitung × Java] Verwendung der Funktion
Einführung in Java
Einfach mit regulären Java-Ausdrücken zu stolpern
Einführung in Algorithmen mit Java --Search (Breitenprioritätssuche)
Herausforderung, mit verstümmelten Zeichen mit Java AudioSystem.getMixerInfo () umzugehen
[Java] So testen Sie, ob es in JUnit null ist
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
Einführung in Algorithmen mit Java --Search (Bit Full Search)
Stellen Sie Java-Webanwendungen mit maven in Azure bereit
Versuchen Sie, Ruby und Java in Dapr zu integrieren
Verwendung des Java-Frameworks mit AWS Lambda! ??
Ich möchte Java8 für jeden mit Index verwenden
Versuchen Sie, die Anmeldefunktion mit Spring Boot zu implementieren
Verwendung der Java-API mit Lambda-Ausdrücken
Erste Schritte mit Kotlin zum Senden an Java-Entwickler
Vorgehensweise zum Abspielen von MP3 mit audio_tag in haml
Ich möchte mit Firestore von Rails spielen
Versuchen Sie, TCP / IP + NIO mit JAVA zu implementieren
[Java] Artikel zum Hinzufügen einer Validierung mit Spring Boot 2.3.1.
Einfacher LINE BOT mit Java Servlet
Ich habe versucht, den Block mit Java zu brechen (1)
[Einführung in Spring Boot] Authentifizierungsfunktion mit Spring Security
Installieren Sie Java mit Homebrew
Spielen Sie Framework2.5 (Java) -Tipps
Änderungen von Java 8 zu Java 11
Summe von Java_1 bis 100
Wechseln Sie die Plätze mit Java
Installieren Sie Java mit Ansible
[Java] Stellen Sie eine Verbindung zu MySQL her
Bequemer Download mit JAVA
Schalten Sie Java mit direnv
Kotlins Verbesserungen an Java
Von Java zu Ruby !!
Java-Download mit Ansible
14 Entspricht einem Funktionsausdruck
Lass uns mit Java kratzen! !!
Einführung in den Java-Befehl
Erstellen Sie Java mit Wercker
Mit Kotorin ―― 7. Scoping-Funktion
Serverlose Funktion mit Micronaut