答案 0 :(得分:6)
有一些。它们通常被描述为类似“Java中的函数式编程”库,而不是引用LISP。
在我的公司,功能编程德鲁伊在Functional Java作为他们的首选图书馆,虽然有一个重要且有声音的少数人喜欢Guava中的功能性条款。
Guava是一个非常主流和受欢迎的图书馆;它坚定地在“没有人被解雇使用”类别。 FJ可能不那么出名,但我们很高兴地使用它。我们甚至forked it,所以我们可以帮助改进它。
答案 1 :(得分:2)
那么你会期待Java 8!它将包含Project Lambda,它对于类似闭包的匿名类具有更好,更好的语法。†示例:
Iterable<String> strs = ...
Iterable<String> downCased = strs.map(s -> s.toLowerCase());
任何带有一个方法的接口(或带有一个抽象方法的抽象类)都可以使用这种语法,包括Guava的Function
和Predicate
(尽管Java 8有自己的{ {1}}和Mapper
接口,因此可以直接使用这些接口)。在这种情况下,Predicate
是一种新的扩展方法,它采用名为Iterable.map
的新接口类型。
如果你想了解更多Java 8 lambdas的例子,请问!
†匿名类的所有常规限制仍然适用,包括本地自由变量必须“有效最终”。这意味着您不必将变量显式标记为Mapper
,但仍然不允许您更改该值。