Programmation fonctionnelle en Java

Existe-t-il une bonne bibliothèque pour la functional programming en Java?

Je cherche des choses comme Predicate et List.Find () (comme méthode statique). Pas compliqué à mettre en œuvre, mais ce serait bien de trouver une bibliothèque réutilisable ici.

FunctionalJava est la bibliothèque la plus connue; il utilise des fermetures Java ( BGGA ) pour des exemples:

final Array a = array(1, 2, 3); final Array b = a.map({int i => i + 42}); arrayShow(intShow).println(b); // {43,44,45} 

MODIFIER

Vérifiez aussi lambdaj .

EDIT supplémentaire

BGGA est entièrement facultatif. Cela rend la syntaxe plus agréable.

scala est un langage de programmation fonctionnel entièrement compatible avec java (qui traverse le jvm). Il offre un beau mélange de techniques fonctionnelles et orientées object, ainsi que de nombreuses améliorations par rapport à Java en génériques et en concurrence. Certains disent même qu’il pourrait remplacer le java.

Bibliothèques Java

Il y a des bibliothèques qui peuvent vous aider à faire cela, en faisant déjà les démarches pour vous et en cachant les choses obscures:

Bibliothèques matures / établies

  • Java fonctionnel
  • Google goyave
  • LambdaJ

Bibliothèques plus obscures / expérimentales

  • Fun4J
  • JCurry
  • OCaml-Java
  • Jambda
  • Boulons

Celles-ci vous permettront d’écrire du code Java avec une approche plus fonctionnelle et éventuellement une syntaxe et une sémantique plus familières, comme on peut s’y attendre d’un langage compatible FP. Dans la raison, c’est.

Langages JVM

Et évidemment, vous pouvez implémenter un langage fonctionnel au-dessus de Java. Alors vous pouvez utiliser celui-ci comme votre langage de PF. Ce qui est un peu un niveau d’abstraction plus élevé que ce que vous aviez demandé, mais relativement dans le contexte (même si je sortingche un peu, d’accord).

Par exemple, consultez:

Langages assez matures

  • Clojure
  • Scala

Langages moins matures ou plus obscurs

  • Frege
  • Jaskell

Lectures complémentaires

Vous pouvez également lire ou regarder ces articles ou vidéos:

  • Programmation fonctionnelle en langage Java , IBM DeveloperWorks (2004)
  • Programmation fonctionnelle Java , Lambda the Ultimate (2004)
  • Programmation fonctionnelle: une introduction pragmatique , InfoQ / CodePalousa (2011)

Tiré de ma réponse P.SE à ” La functional programming est-elle possible en Java? “

Les collections Google ont une sélection décente de méthodes utilitaires de style de functional programming. Certaines classes d’intérêt sont les Iterables, les Itérateurs, la Fonction, les Fonctions, etc.

Il y a aussi un tas de cours de collecte!

Java fonctionnel est celui qui mérite une attention particulière et FunctionalJ en est un autre.

Si vous voulez une solution Java pure, consultez lambdaj

http://code.google.com/p/lambdaj/

Outre la possibilité de définir et d’utiliser la fermeture dans un style DSL, elle permet également de manipuler les collections de manière fonctionnelle, sans écrire explicitement des fermetures ou des boucles.

Jambda est une autre bibliothèque FP. De la documentation :

Jambda est une tentative de fournir au monde de Java (TM) des outils et des concepts issus de la functional programming (FP).

Les objectives sont multiples:

  • Fournir aux programmeurs Java des constructions FP expressives
  • Fournir un pont aux programmeurs Java dans le monde des FP
  • Pour voir jusqu’où Java et les génériques peuvent être étendus

Ce document est une tentative d’introduire les programmeurs Java dans le monde de la PF, tout en expliquant certaines (ou la plupart) des fonctionnalités de Jambda.

Apache Commons contient un code fonctionnel. Voir par exemple l’interface Predicate .

Google Guava est fonctionnel:

  • opérations de collecte
  • Constructions de concurrence (Futures)

Ou téléchargez OpenJDK 8 pour tester les expressions Lambda comme elles le seront dans Java 8. Les API de collection sont notamment 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 collecte et des comparaisons avec Guava, LambdaJ et FunctionalJava.

Scala a été mentionné ici, mais il existe un langage beaucoup plus léger et compatible avec Java: Xtend . Il comstack en langage Java simple et utilise le même système de type. Il a un excellent support Eclipse. Vous pouvez mélanger des fichiers .java et .xtend dans un seul projet.

Exemple de code:

 def static void main(Ssortingng[] args) { val s = #[1,2,3].map[it+43].join(", ") println(s); } 

Bien que Java fonctionnel soit le plus populaire, je vous suggère d’essayer Google Guava Lib.

http://code.google.com/p/guibi-libraries/