Java pour jouer avec Function

Cet article a également été publié dans J'ai écrit une fonction d'ordre supérieur en langage Go et joué avec. Ceci est un hommage à .com / _makanai / items / ca313c8e117da78154fa). Ce n'est rien de plus qu'amusant (comme dans l'article original), donc si vous recherchez une implémentation utile, le retour du navigateur est recommandé.

(Remarque) Veuillez noter qu'il peut y avoir des parties étranges car il est écrit avec une tension de minuit m (_ _) m

Sujet principal

Puisque la valeur de retour de hoge1 ~ 4 est Function, plus d'arguments peuvent être passés.

//Prend Integer et renvoie Integer
Function<Integer, Integer> hoge1 = value -> value;
hoge1.apply(1); // return 1
//Prend Integer et renvoie une fonction qui prend Integer et renvoie Integer
Function<Integer, Function<Integer, Integer>> hoge2 = value -> (a -> value + a);
hoge2.apply(1).apply(2);    // return 3
///Prend Integer, prend Integer, prend Integer et renvoie une fonction qui renvoie Integer
Function<Integer, Function<Integer, Function<Integer, Integer>>> hoge3 = value -> (a -> (b -> value + a + b));
hoge3.apply(1).apply(2).apply(4);   // return 7
//Prend Integer, prend Integer, prend Integer, prend Integer et renvoie une fonction qui renvoie Integer
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

Puisque l'argument de hoge5 ~ 7 est une clôture, il est nécessaire de passer le processus à l'avance. (Hoge5 ~ 7 a utilisé la valeur de retour de hoge1 ~ 4 car l'argument est une fonction)

//Prend Integer et renvoie une fonction qui prend Integer, prend Integer et prend Integer et renvoie une fonction qui prend Integer et renvoie Integer
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
//Prenez Integer et prenez une fonction qui prend Integer et retourne Integer, prenez Integer et prenez Integer et retournez une fonction qui prend Integer et renvoie Integer
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
//Prenez Integer, prenez Integer, prenez Integer et retournez Integer, prenez Integer, prenez Integer, prenez Integer et renvoyez Integer.
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

Bien sûr, vous pouvez avoir la fonction qui est la valeur de retour telle quelle. Je passe un nombre, mais ce n'est pas vraiment calculé

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

Tournez la boucle et ajoutez tout ... Comme vous pouvez le voir, le calcul qui utilisait l'instruction for avant Java 8! Ça devient somnolent ... w

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

Prenez T et T et retournez T Prenez une fermeture, prenez T et prenez T et retournez T (A demain ... ww)


Tournez la boucle pour obtenir la valeur maximale (faisons quelque chose avec le traitement du flux ...)

finalement

Merci à ceux qui ont tout lu correctement. (Je suis épuisé à la fin, donc je le referai la prochaine fois ...) Veillez à ne pas intégrer le code de merde ci-dessus qui est difficile à lire pour les autres dans le produit réel.

Il est difficile de s'habituer à la programmation fonctionnelle, mais c'est amusant quand on apprend à la connaître. Pour le moment, je vais faire de la programmation fonctionnelle avec Java et lire un excellent livre H.

P.S Où est le meilleur endroit pour casser une expression lambda Java ... (...?)

Recommended Posts

Java pour jouer avec Function
Connectez-vous à DB avec Java
Connectez-vous à MySQL 8 avec Java
Jouez avec les nœuds de fonction Java qui peuvent utiliser Java avec Node-RED
Java pour apprendre avec les ramen [Partie 1]
[Java] Points à noter avec Arrays.asList ()
Osez défier Kaggle avec Java (1)
J'ai essayé d'interagir avec Java
Java, des tableaux pour débuter avec les débutants
Tweak Markdown avec Java flexmark-java
Je veux créer une fonction avec kotlin et java!
Comment compiler Java avec VsCode & Ant
[Java] Résumez comment comparer avec la méthode equals
Comment utiliser BootStrap avec Play Framework
Introduction aux algorithmes avec java-Search (recherche prioritaire en profondeur)
Essayez d'implémenter une fonction de connexion avec Spring-Boot
Fonction d'authentification avec Play Framework [Enregistrement et authentification]
[Java] Introduction à Java
Publier sur Slack à partir de Play Framework 2.8 (Java)
Comment implémenter TextInputLayout avec la fonction de validation
[Traitement × Java] Comment utiliser la fonction
Introduction à Java
Facile à parcourir avec les expressions régulières Java
Introduction aux algorithmes avec java --Search (recherche de priorité de largeur)
Défi pour gérer les caractères déformés avec Java AudioSystem.getMixerInfo ()
[Java] Comment tester s'il est nul dans JUnit
J'ai essayé de faire une authentification de base avec Java
Introduction aux algorithmes avec java --Search (bit full search)
Déployez des applications Web Java sur Azure avec maven
Essayez d'intégrer Ruby et Java avec Dapr
Comment utiliser le framework Java avec AWS Lambda! ??
Je veux utiliser java8 forEach avec index
Essayez d'implémenter la fonction de connexion avec Spring Boot
Comment utiliser l'API Java avec des expressions lambda
Premiers pas avec Kotlin à envoyer aux développeurs Java
Procédure de lecture de mp3 en utilisant audio_tag dans haml
Je veux jouer avec Firestore de Rails
Essayez d'implémenter TCP / IP + NIO avec JAVA
[Java] Article pour ajouter une validation avec Spring Boot 2.3.1.
Facile à créer LINE BOT avec Java Servlet
J'ai essayé de casser le bloc avec java (1)
[Introduction à Spring Boot] Fonction d'authentification avec Spring Security
Installez java avec Homebrew
Conseils pour Play Framework2.5 (Java)
Changements de Java 8 à Java 11
Somme de Java_1 à 100
Changer de siège avec Java
Installez Java avec Ansible
[Java] Connectez-vous à MySQL
Téléchargement confortable avec JAVA
Changer java avec direnv
Améliorations de Kotlin à Java
De Java à Ruby !!
Téléchargement Java avec Ansible
14 Correspond à une expression de fonction
Raclons avec Java! !!
Introduction à la commande java
Construire Java avec Wercker
Avec Kotorin ―― 7. Fonction de cadrage
Fonction sans serveur avec Micronaut