Java中的函数式编程

use*_*070 11 java functional-programming

如何在java中模拟函数式编程,特别是将函数映射到项集合?

map(func, new String[]{"a","b","c"});

什么是最简单和最尴尬的方式呢?

Joa*_*uer 10

在Java 8中,函数式编程的所有尝试都会在Java中具有一些冗长和/或笨拙的部分.

直接的方法是提供一个Function接口(例如这种形式的Guava)并提供各种接受和调用它的方法(例如Collections#transfrom()我认为你的map()方法应该做的事情).

糟糕的是你需要实现Function并经常使用匿名内部类来实现,它具有非常详细的语法:

Collection<OutputType> result = Collections.transform(input, new Function<InputType,OutputType>() {
    public OutputType apply(InputType input) {
      return frobnicate(input);
    }
});
Run Code Online (Sandbox Code Playgroud)

Lambda表达式(在Java 8中引入)使这变得更加容易(并且可能更快).使用lambdas的等效代码如下所示:

Collection<OutputType> result = Collections.transform(input, SomeClass::frobnicate);
Run Code Online (Sandbox Code Playgroud)

或者更详细,但更灵活:

Collection<OutputType> result = Collections.transform(input, in -> frobnicate(in));
Run Code Online (Sandbox Code Playgroud)


Per*_*ium 5

我已经将lambdajfunctionaljava用于此类事情.而且可能有其他人......