Функциональное программирование на Java

Есть ли хорошая библиотека для функционального программирования на Java?

Я ищу такие вещи, как Predicate и List.Find () (как статический метод). Не сложно реализовать, но было бы неплохо найти здесь многоразовую библиотеку.

FunctionalJava – самая известная библиотека; он использует Java-соединения ( BGGA ) для примеров:

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

РЕДАКТИРОВАТЬ

Проверьте также lambdaй .

Дальше EDIT

BGGA полностью необязательна. Это просто улучшает синтаксис.

scala – это функциональный язык программирования, полностью совместимый с java (выполняется через jvm). Он предлагает прекрасное сочетание объектно-ориентированных и функциональных методов, а также множество улучшений по сравнению с java в дженериках и параллелизмах. Некоторые даже говорят, что это может заменить java.

Библиотеки Java

Есть библиотеки, которые могут помочь вам сделать это, уже делая для вас работу и скрывая загадочные вещи:

Зрелые / установленные библиотеки

  • Функциональная Java
  • Google guava
  • LambdaJ

Более неясные / экспериментальные библиотеки

  • Fun4J
  • JCurry
  • OCaml-Java
  • Jambda
  • Болты

Они позволят вам написать Java-код с более функциональным подходом и, возможно, более знакомым синтаксисом и семантикой, как и следовало ожидать от языка, соответствующего FP. Это разумно.

Языки JVM

И, очевидно, вы можете реализовать функциональный язык поверх Java. Чтобы вы могли использовать этот язык в качестве своего FP-языка. Это немного более высокий уровень абстракции, чем то, что вы просили, но относительно внутри контекста (хотя я немного обманываю здесь, предоставлен).

Например, проверьте:

Довольно зрелые языки

  • Clojure
  • Scala

Менее зрелые или более неясные языки

  • Фреге
  • Jaskell

Дальнейшее чтение

Вы также можете прочитать или посмотреть эти статьи или видеоролики:

  • Функциональная программирование на языке Java , IBM DeveloperWorks (2004)
  • Функциональное программирование Java , Lambda the Ultimate (2004)
  • Функциональное программирование: прагматическое введение , InfoQ / CodePalousa (2011)

Взято из моего ответа P.SE на « Возможно ли функциональное программирование в Java? »

В коллекциях Google есть достойный выбор методов использования стиля функционального программирования. Некоторые classы интересов – Iterables, Iterators, Function, Functions и т. Д.

Он также имеет кучу classов сбора!

Функциональная Java – это то, на что стоит взглянуть, а FunctionalJ – другое.

Если вы хотите, чтобы чистое решение Java проверяло lambdaj

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

Помимо возможности определять и использовать закрытие в стиле DSL, он также позволяет манипулировать коллекциями функциональным способом без явных замыканий или циклов записи

Jambda – другая FP-библиотека. Из документации :

Jambda – это попытка предоставить миру Java (TM) инструменты и концепции из функционального программирования (FP).

Цели несколько:

  • Предоставить Java-программистам выразительные конструкции FP
  • Предоставить мост для Java-программистов в FP-мир
  • Чтобы узнать, как далеко можно растянуть Java и дженерики

Этот документ представляет собой попытку внедрения Java-программистов в мир FP и в то же время объясняет некоторые (или большинство) функций в Jambda.

В Apache Commons есть некоторый функциональный код. См. Например, интерфейс Predicate .

Google Guava имеет функциональные возможности:

  • сбор
  • конструкции параллелизма (Futures)

Или загрузите OpenJDK 8, чтобы опробовать Лямбда-выражения так, как они станут на Java 8. Среди прочих, API-интерфейсы коллекции настроены на поддержку функционального стиля. См. http://macgyverdev.blogspot.se/2012/10/functional-programming-in-java.html примеры новых API-интерфейсов коллекции и сравнения с Guava, LambdaJ и FunctionalJava.

Скала упоминалась здесь, но есть намного более легкий и более Java-совместимый язык: Xtend . Он компилируется в обычную Java и использует систему того же типа. Он имеет отличную поддержку Eclipse. Вы можете смешивать файлы .java и .xtend в одном проекте.

Образец кода:

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

Хотя функциональная Java является самой популярной, но я предлагаю вам попробовать Google guava lib.

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

  • Использование Либо для обработки сбоев в коде Scala
  • Начало работы с Haskell
  • «Закрытие - это объекты бедного человека и наоборот». Что это значит?
  • std :: bind перегрузка
  • Возможно ли программирование графического интерфейса?
  • Использует функцию Haskell id
  • Последствия foldr vs foldl (или foldl ')
  • Что такое «n + k patterns» и почему они запрещены в Haskell 2010?
  • Вычисление функции, которая принимает бесконечные аргументы
  • Каково точное определение замыкания?
  • Какова мотивация присвоения Scala для оценки Unit вместо присвоенного значения?
  • Давайте будем гением компьютера.