从Java 8中的Method返回Lambda?

我刚刚开始使用Java 8,我想知道是否有办法编写一个返回Function的方法?

现在我的方法如下:

 Function getMyFunction() { return new Function() { @Override public String apply(Integer integer) { return "Hello, world!" } } } 

有没有办法在Java 8中更简洁地编写? 我希望这会起作用,但事实并非如此:

 Function getMyFunction() { return (it) -> { return "Hello, world: " + it } } 

摆脱函数定义中的return语句:

 Function getMyFunction() { return (it) -> "Hello, world: " + it; } 

你缺少半冒号:

 return (it) -> { return "Hello, world: " + it; }; 

虽然如上所述它可以缩短为:

 return it -> "Hello, world: " + it; 

你可以像这样写它:

 Function function = n -> "Hello, world " + n; 

我想指出在这种情况下使用内置的IntFunction可能更合适:

 IntFunction getMyFunction() { return it -> "Hello, world: " + it; } 

IntFunction是function接口的标准API的一部分,它定义了一系列具有接口的优点,主要与Java原语相关。

因此,99%的案例的答案都是由@assylias给出的

你缺少半冒号:

return (it) -> { return "Hello, world: " + it; }; Although as noted it return (it) -> { return "Hello, world: " + it; }; Although as noted it可以缩短为:

return it -> "Hello, world: " + it;

然而,我认为如果你想将lambda分配给一个变量(以后再使用),那就值得补充一下。 您可以输入以下命令:

 Callable findIt = () -> returnInstanceOfYourClass(); 

然后你可以轻松使用它,这种用法的一个例子:

 if(dontNeedzToWrap()) { return findIt.call(); } return Wrapp.withTransaction(() -> findIt.call()); 

如果Wrapp.withTransaction()方法接受相同类型的Callable作为参数,那么事情甚至可以变得更简单。 (我用这个用于JPA atm)