Подтвердить что ты не робот

Эквивалент для лямбда-функций Python в Java?

Может кто-нибудь скажет мне, есть ли эквивалент для лямбда-функций Python в Java?

4b9b3361

Ответ 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, не хватает этих красот программирования функционального стиля: Может ли ваш язык программирования сделать это?.

Ответ 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();
}

Он по-прежнему немного клочковый, да, но он имеет как минимум вход/выход.

Ответ 6

С выпуском Java 8 теперь доступно лямбда-выражение. И лямбда-функция в java на самом деле "более мощная", чем python.

В Python lambda-expression может иметь только одно выражение для своего тела, и утверждение return не разрешено. В Java вы можете сделать что-то вроде этого: (int a, int b) -> { return a * b; }; и другие дополнительные вещи.

Java 8 также вводит другой интерфейс, называемый Function Interface. Вы можете также проверить это.