Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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 полностью необязательна. Это просто улучшает синтаксис.

Ответ 2

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

Ответ 3

Библиотеки Java

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

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

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

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

Языки JVM

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

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

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

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

Дополнительная литература

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


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

Ответ 4

Коллекции Google имеет достойный выбор методов утилиты стиля функционального программирования. Некоторые классы интересов - Iterables, Iterators, Function, Functions и т.д.

В нем также есть набор классов сбора данных.

Ответ 6

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

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

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

Ответ 7

Jambda - еще одна FP-библиотека. Из документа :

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

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

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

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

Ответ 8

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

Ответ 9

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

  • операции по сборке
  • concurrency конструкции (фьючерсы)

Ответ 10

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

Ответ 11

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

Пример кода:

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

Ответ 12

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

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