Je viens de commencer à utiliser Java 8 et je me demande s'il existe un moyen d'écrire une méthode qui renvoie un Function
?
En ce moment, j'ai une méthode comme ci-dessous:
Function<Integer, String> getMyFunction() {
return new Function<Integer, String>() {
@Override public String apply(Integer integer) {
return "Hello, world!"
}
}
}
Existe-t-il un moyen d'écrire cela plus succinctement en Java 8? J'espérais que cela fonctionnerait mais cela ne fonctionne pas:
Function<Integer, String> getMyFunction() {
return (it) -> { return "Hello, world: " + it }
}
Débarrassez-vous de votre déclaration de retour à l'intérieur de votre définition de fonction:
Function<Integer, String> getMyFunction() {
return (it) -> "Hello, world: " + it;
}
Il vous manque des points-virgules:
return (it) -> { return "Hello, world: " + it; };
Bien que comme indiqué, il peut être abrégé comme suit:
return it -> "Hello, world: " + it;
Je voudrais souligner qu'il pourrait être plus approprié d'utiliser le IntFunction
intégré dans ce cas:
IntFunction<String> getMyFunction() {
return it -> "Hello, world: " + it;
}
IntFunction
fait partie de la API standard pour les interfaces fonctionnelles qui définit une gamme de bonnes d'avoir des interfaces, principalement liées à Java primitives.
Vous pouvez l'écrire simplement comme ça:
Function<Integer, String> function = n -> "Hello, world " + n;
Ainsi, la réponse pour 99% des cas a été donnée par @assylias
Il vous manque des points-virgules:
return (it) -> { return "Hello, world: " + it; }; Although as noted it
peut être raccourci en:
return it -> "Hello, world: " + it;
Pourtant, je pense que cela vaut la peine d'ajouter cela, si vous voulez affecter votre lambda à une variable (à utiliser plus tard). Vous pouvez le faire en tapant:
Callable<YourClass> findIt = () -> returnInstanceOfYourClass();
Et puis vous pouvez facilement l'utiliser, un exemple d'une telle utilisation:
if(dontNeedzToWrap()) {
return findIt.call();
}
return Wrapp.withTransaction(() -> findIt.call());
Étant donné, les choses peuvent être encore plus simples si la méthode Wrapp.withTransaction()
accepte le même type de Callable comme paramètres. (J'utilise ceci pour JPA atm)