1

有没有人用java编写了一个提供映射功能的库(例如lisp的mapcar)。

我看到了这篇文章和其他几篇文章(比如这个这个这个),但遗憾的是我认为没有什么是主流和/或可用的。

4

2 回答 2

6

有几个。它们通常被描述为类似于“Java 中的函数式编程”库,而不是通过引用 LISP。

在我的公司,函数式编程德鲁伊将函数式 Java作为他们的首选库,尽管有相当一部分人更喜欢Guava中的函数式规定。

Guava 是一个非常主流和流行的库;它牢牢地属于“没有人因使用而被解雇”类别。FJ 可能不太为人所知,但我们使用它非常愉快。我们甚至已经分叉了它,所以我们可以帮助改进它。

于 2012-08-09T19:32:32.730 回答
2

那么,您将期待 Java 8!它将包含 Project Lambda,它为类似闭包的匿名类提供了更好的语法。†</sup> 示例:

Iterable<String> strs = ...
Iterable<String> downCased = strs.map(s -> s.toLowerCase());

任何具有一种方法的接口(或具有一种抽象方法的抽象类)都可以使用这种语法,包括 Guava 的FunctionPredicate(尽管 Java 8 有自己的MapperPredicate接口,所以这些都是开箱即用的)。在这种情况下Iterable.map,是一个新的扩展方法,它采用一个名为 的新接口类型Mapper

如果您想了解更多 Java 8 lambda 示例,请询问!

† 匿名类的所有通常限制仍然适用,包括局部自由变量必须是“有效的最终”。这意味着您不必将变量显式标记为final,但仍然不允许更改该值。

于 2012-08-09T19:57:12.310 回答