Есть ли хорошая библиотека для функционального программирования на Java?
Я ищу такие вещи, как Predicate и List.Find( ) (как статический метод). Не сложно реализовать, но было бы неплохо найти здесь многократно используемую библиотеку.
Есть ли хорошая библиотека для функционального программирования на Java?
Я ищу такие вещи, как Predicate и List.Find( ) (как статический метод). Не сложно реализовать, но было бы неплохо найти здесь многократно используемую библиотеку.
FunctionalJava - самая известная библиотека; он использует закрытие Java (BGGA) для примеров:
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}
ИЗМЕНИТЬ
Также проверьте lambdaj.
Далее EDIT
BGGA полностью необязательна. Это просто улучшает синтаксис.
Scala - это функциональный язык программирования, полностью совместимый с Java (работает через JVM). Он предлагает прекрасное сочетание объектно-ориентированных и функциональных методов, а также множество улучшений по сравнению с Java в обобщениях и параллелизме. Некоторые даже говорят, что это может заменить Java.
Есть библиотеки, которые могут помочь вам сделать это, уже выполняя для вас работу и скрывая загадочные вещи:
Это позволит вам написать Java-код с более функциональным подходом и, возможно, более привычным синтаксисом и семантикой, как вы ожидаете от компетентного по FP языка. В пределах причины, то есть.
И, очевидно, вы можете реализовать функциональный язык поверх Java. Чтобы вы могли использовать этот язык в качестве своего FP-языка. Это немного более высокий уровень абстракции, чем то, что вы просили, но относительно внутри контекста (хотя я немного обманываю здесь, предоставлен).
Например, проверьте:
Вы также можете читать или смотреть эти статьи или видеоролики:
Взято из моего P.SE ответа на "Возможно ли функциональное программирование на Java?"
Коллекции Google имеет достойный выбор методов утилиты стиля функционального программирования. Некоторые классы интересов - Iterables, Iterators, Function, Functions и т.д.
В нем также есть набор классов сбора данных.
Функциональная 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 имеет функциональность:
Или загрузите OpenJDK 8, чтобы опробовать Лямбда-выражения так, как они станут в Java 8. Среди прочих, API-интерфейсы коллекции настроены на поддержку функционального стиля. Видеть http://macgyverdev.blogspot.se/2012/10/functional-programming-in-java.html для примеров новых API-интерфейсов коллекции и сравнений с Guava, LambdaJ и FunctionalJava.
Scala был упомянут здесь, но там гораздо легче и более совместимый с 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.