Может кто-нибудь скажет мне, есть ли эквивалент для лямбда-функций Python в Java?
Эквивалент для лямбда-функций Python в Java?
Ответ 1
К сожалению, в Java нет лямбда. Однако вы можете получить почти такой же эффект (по-настоящему уродливый) с анонимными классами:
interface MyLambda {
void theFunc(); // here we define the interface for the function
}
public class Something {
static void execute(MyLambda l) {
l.theFunc(); // this class just wants to use the lambda for something
}
}
public class Test {
static void main(String[] args) {
Something.execute(new MyLambda() { // here we create an anonymous class
void theFunc() { // implementing MyLambda
System.out.println("Hello world!");
}
});
}
}
Очевидно, что они должны быть в отдельных файлах: (
Ответ 2
Я не думаю, что существует точный эквивалент, однако есть анонимные классы, которые находятся примерно так же близко, как вы можете получить. Но все еще очень разные. Джоэл Спольский написал статью о том, как учащиеся преподавали только Java, не хватает этих красот программирования функционального стиля: Может ли ваш язык программирования сделать это?.
Ответ 3
Одна идея основана на общем public interface Lambda<T>
- см. http://www.javalobby.org/java/forums/t75427.html.
Ответ 4
В некоторой степени аналогично Zifre, вы можете создать интерфейс, таким образом
public interface myLambda<In, Out> {
Out call(In i);
}
чтобы вы могли писать, скажем
Function<MyObj, Boolean> func = new Function<MyObj, Boolean>() {
public Boolean callFor(myObj obj) {
return obj.canDoStuff();
};
MyObj thing = getThing;
if (func.callFor(thing)) {
doSomeStuff();
} else {
doOtherStuff();
}
Он по-прежнему немного клочковый, да, но он имеет как минимум вход/выход.
Ответ 5
Да,
Лямбда-выражения вводятся в java из java8.
Основной синтаксис для лямбда-выражений:
(parameters)->
{
statements;
}
Пример
(String s)->
{
System.out.println(s);
}
Проверьте эту ссылку:
http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html
Ответ 6
С выпуском Java 8 теперь доступно лямбда-выражение. И лямбда-функция в java на самом деле "более мощная", чем python.
В Python lambda-expression может иметь только одно выражение для своего тела, и утверждение return
не разрешено. В Java вы можете сделать что-то вроде этого: (int a, int b) -> { return a * b; };
и другие дополнительные вещи.
Java 8 также вводит другой интерфейс, называемый Function Interface
. Вы можете также проверить это.