Return Lambda from Method in Java 8?

2019-03-10 20:03发布

I have just begun to use Java 8 and I am wondering if there is a way to write a method that returns a Function?

Right now I have method like below:

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

Is there a way to write that more succinctly in Java 8? I was hoping this would work but it does not:

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

5条回答
劳资没心,怎么记你
2楼-- · 2019-03-10 20:30

You are missing semi colons:

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

Although as noted it can be shortened to:

return it -> "Hello, world: " + it;
查看更多
啃猪蹄的小仙女
3楼-- · 2019-03-10 20:37

You could write it simply like that:

Function<Integer, String> function = n -> "Hello, world " + n;
查看更多
神经病院院长
4楼-- · 2019-03-10 20:39

So, the answer for 99% of the cases has been given by @assylias

You are missing semi colons:

return (it) -> { return "Hello, world: " + it; }; Although as noted it can be shortened to:

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

Yet, I think that it's worth it to add that, if you want to assign your lambda to a variable (to use later). You can do so by typing:

Callable<YourClass> findIt = () -> returnInstanceOfYourClass();

And then you can easily use it, one example of such a use:

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

Given, things can be even made simpler if the Wrapp.withTransaction() method accepts the same kind of Callable's as parameters. (I use this for JPA atm)

查看更多
beautiful°
5楼-- · 2019-03-10 20:44

Get rid of your return statement inside of your function definition:

Function<Integer, String> getMyFunction() {
    return (it) -> "Hello, world: " + it;
}
查看更多
聊天终结者
6楼-- · 2019-03-10 20:47

I would like to point out that it might be more appropriate to use the built-in IntFunction in this case:

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

IntFunction is a part of the standard API for functional interfaces which defines a range of good to have interfaces, mostly related to Java primitives.

查看更多
登录 后发表回答