Я был в команде, которая использует библиотеку FJ, и я знаю других. В одной команде он использовался в качестве замены домашней библиотеки, которая была менее отполированной, в другой он заменял Google Collections. Я также знаю некоторых людей, которые копируют исходный код из FJ для развертывания собственной реализации.
По моему мнению, если вы должны использовать Java, вы должны использовать что-то вроде функциональной Java, чтобы сделать вашу жизнь проще.
Повысило ли это качество или четкость кода?
Код, написанный в функциональном стиле, более лаконичен и, следовательно, более понятен. Библиотека поставляется и поощряет использование неизменяемых структур данных, что повышает качество. Библиотека также поддерживает композицию, а не наследование, что улучшает возможность повторного использования вашего кода.
Повысить производительность?
Определенно. Разработчики с более мощными инструментами более продуктивны. По моему опыту разработчики считают, что первоклассные функции делают программирование проще и приятнее. Счастливые программисты - продуктивные программисты.
Уменьшить потенциальные точки отказа?
Более функциональный стиль программирования препятствует изменчивому состоянию, что устраняет большой класс ошибок. Кроме того, более мощные абстракции приводят к меньшему количеству повторений, что уменьшает количество мест, где что-то не так.
Влияние производительности?
Нет никаких оснований полагать, что на производительность будет влиять так или иначе. Предоставленные структуры данных предназначены для простоты использования и выразительности, а не производительности, но они написаны оптимально для того, что они есть. Как и во всем остальном, то, как вы ведете машину, важнее, чем то, что вы ведете. Например, fj.data.List является связанным списком, поэтому он имеет O (n) произвольный доступ и конкатенацию, поэтому вы избегаете его для этих целей. Для сравнения, fj.data.Stream имеет конкатенацию O (1).