从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)