Existe-t-il une bonne bibliothèque pour la programmation fonctionnelle en Java?
Je cherche des trucs comme Predicate et List.Find () (comme méthode statique). Pas compliqué à implémenter, mais ce serait bien de trouver une bibliothèque réutilisable ici.
FunctionalJava est la bibliothèque la plus connue; il utilise Java ( BGGA ) pour des exemples:
final Array<Integer> a = array(1, 2, 3);
final Array<Integer> b = a.map({int i => i + 42});
arrayShow(intShow).println(b); // {43,44,45}
[~ # ~] modifier [~ # ~]
Vérifiez également lambdaj .
EDITER
BGGA est entièrement facultatif. Cela rend la syntaxe plus agréable.
Scala est un langage de programmation fonctionnel entièrement compatible avec Java (parcourt le JVM) .Il offre un beau mélange de techniques fonctionnelles et orientées objet ainsi que de nombreuses améliorations par rapport à Java dans les génériques et la concurrence. Certains disent même qu'il pourrait remplacer Java.
Il existe des bibliothèques qui peuvent vous aider à le faire, en faisant déjà le travail préparatoire pour vous et en cachant les choses mystérieuses:
Celles-ci vous permettront d'écrire Java code avec une approche plus fonctionnelle et peut-être une syntaxe et une sémantique plus familières, comme vous pouvez vous y attendre d'un langage compétent en FP. Dans la mesure du possible.
Et évidemment, vous pouvez implémenter un langage fonctionnel au-dessus de Java. Pour que vous puissiez ensuite l'utiliser comme langue FP. Ce qui est un peu un niveau d'abstraction plus élevé que ce que vous avez demandé, mais relativement dans le contexte (bien que je triche un peu ici, accordé).
Par exemple, consultez:
Vous pouvez également vouloir lire ou regarder ces articles ou vidéos:
Tiré de ma P.SE réponse à " La programmation fonctionnelle est-elle possible en Java? "
Google collections a une sélection décente de méthodes utilitaires de style de programmation fonctionnelle. Certaines classes d'intérêt sont les itérables, les itérateurs, la fonction, les fonctions, etc.
Il a également un tas de classes de collection!
Java fonctionnel est celui qui mérite d'être examiné et FunctionalJ en est un autre.
Si vous voulez une solution pure Java check out lambdaj
http://code.google.com/p/lambdaj/
Outre la possibilité de définir et d'utiliser la fermeture dans un style DSL, il permet également de manipuler les collections de manière fonctionnelle, sans écrire explicitement les fermetures ou les boucles
Ou téléchargez OpenJDK 8 pour essayer les expressions Lambda telles qu'elles deviendront dans Java 8. Entre autres, les API de collecte sont ajustées pour prendre en charge un style fonctionnel. Voir http: // macgyverdev.blogspot.se/2012/10/functional-programming-in-Java.html pour des exemples de nouvelles API de collection et des comparaisons avec Guava, LambdaJ et FunctionalJava.
Apache Commons contient du code fonctionnel. Voir par exemple, l'interface Predicate .
Google Guava a fonctionnel:
Scala a été mentionné ici, mais il y a beaucoup plus léger et plus Java: Xtend . Il se compile en clair Java et utilise le même type de système. Il prend en charge Eclipse. Vous pouvez mélanger .Java
et .xtend
fichiers dans un seul projet.
Exemple de code:
def static void main(String[] args) {
val s = #[1,2,3].map[it+43].join(", ")
println(s);
}
Jambda est une autre bibliothèque FP. De la documentation :
Jambda est une tentative de fournir au monde Java (TM) des outils et des concepts de programmation fonctionnelle (FP).
Les objectifs sont multiples:
- Fournir aux programmeurs Java des constructions expressives FP
- Pour fournir un pont pour les programmeurs Java dans le monde FP
- Pour voir jusqu'où Java et les génériques peuvent être étirés
Ce document est une tentative d'introduire Java programmeurs dans le monde FP, et en même temps d'expliquer certaines (ou la plupart) des fonctionnalités de Jambda.
Bien que fonctionnel Java est le plus populaire mais je vais vous suggérer d'essayer Google guava lib.