Ответ 1
Избавьтесь от оператора return внутри определения вашей функции:
Function<Integer, String> getMyFunction() {
return (it) -> "Hello, world: " + it;
}
Я только начал использовать Java 8, и мне интересно, есть ли способ написать метод, который возвращает Function
?
Сейчас у меня есть метод, как показано ниже:
Function<Integer, String> getMyFunction() {
return new Function<Integer, String>() {
@Override public String apply(Integer integer) {
return "Hello, world!"
}
}
}
Есть ли способ написать это более кратко в Java 8? Я надеялся, что это сработает, но это не так:
Function<Integer, String> getMyFunction() {
return (it) -> { return "Hello, world: " + it }
}
Избавьтесь от оператора return внутри определения вашей функции:
Function<Integer, String> getMyFunction() {
return (it) -> "Hello, world: " + it;
}
Вам не хватает полуколонок:
return (it) -> { return "Hello, world: " + it; };
Хотя, как отмечено, его можно сократить до:
return it -> "Hello, world: " + it;
Я хотел бы отметить, что было бы более целесообразно использовать встроенный IntFunction
в этом случае:
IntFunction<String> getMyFunction() {
return it -> "Hello, world: " + it;
}
IntFunction
является частью стандартного API для функциональных интерфейсов, который определяет диапазон полезных интерфейсов, в основном связанных с Java-примитивами.
Вы можете написать это просто так:
Function<Integer, String> function = n -> "Hello, world " + n;
Итак, ответ на 99% случаев был дан @assylias
Вам не хватает полуколонок:
return (it) -> { return "Hello, world: " + it; }; Although as noted it
можно сократить до:
return it -> "Hello, world: " + it;
Тем не менее, я считаю, что стоит добавить это, если вы хотите присвоить свою лямбду переменной (использовать ее позже). Вы можете сделать это, набрав:
Callable<YourClass> findIt = () -> returnInstanceOfYourClass();
И тогда вы можете легко использовать его, один пример такого использования:
if(dontNeedzToWrap()) {
return findIt.call();
}
return Wrapp.withTransaction(() -> findIt.call());
Учитывая, все может быть упрощено, если метод Wrapp.withTransaction()
принимает тот же тип Callable, что и параметры.
(Я использую это для JPA atm)