2014-11-06 6 views
21

Ich habe gerade begonnen, Java 8 zu verwenden, und ich frage mich, ob es eine Möglichkeit gibt, eine Methode zu schreiben, die eine Function zurückgibt?Gibt Lambda von Methode in Java 8 zurück?

Im Moment habe ich Methode wie unten:

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

Gibt es eine Möglichkeit, dass kurz und bündig 8 in Java zu schreiben? Ich hatte gehofft, dies funktionieren würde, aber es funktioniert nicht:

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

Antwort

25

Lassen Sie sich innerhalb Ihrer Funktion Definition Ihrer return-Anweisung los:

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

Sie fehlen Semikolon:

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

Obwohl wie angegeben kann es wie folgt verkürzt werden:

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

Man könnte es schreiben Sie doch einfach so:

Function<Integer, String> function = n -> "Hello, world " + n; 
1

So hat die Antwort für 99% der Fälle von @assylias

Sie fehlen Semikolon gegeben worden:

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

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

: kann verkürzt werden

Aber ich denke, dass es sich lohnt, hinzuzufügen, wenn Sie Ihr Lambda einer Variablen zuweisen möchten (später zu verwenden). Sie können durch Eingabe so tun:

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

Und dann kann man es leicht ein Beispiel für einen solchen Einsatz verwenden,:

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

Given, können die Dinge noch einfacher gemacht werden, wenn die Wrapp.withTransaction() Methode akzeptiert die gleiche Art von Callable wie Parameter. (ich benutze diese für JPA atm)

3

Ich möchte darauf hinweisen, dass es sinnvoller sein könnte, die eingebaute in IntFunction in diesem Fall zu verwenden:

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

IntFunction ist ein Teil des standard API for functional interfaces Dies definiert eine Reihe von Schnittstellen, die gut zu haben sind, hauptsächlich bezogen auf Java-Primitive.

Verwandte Themen