Встречается на собеседованиях • сегодня

Что такое Lambda

Лямбда представляет собой набор инструкций, которые можно выделить в отдельную переменную и затем многократно вызвать в различных местах программы.

Основу лямбда-выражения составляет лямбда-оператор, который представляет стрелку ->. Этот оператор разделяет лямбда-выражение на две части: левая часть содержит список параметров выражения, а правая, собственно, представляет тело лямбда-выражения, где выполняются все действия.

Лямбда-выражение не выполняется само по себе, а образует реализацию метода, определенного в функциональном интерфейсе. При этом важно, что функциональный интерфейс должен содержать только один единственный метод без реализации.

text
interface Operationable {
    int calculate(int x, int y);
}

public static void main(String[] args) {
    Operationable operation = (x, y) -> x + y;     
    int result = operation.calculate(10, 20);
    System.out.println(result); //30
}

По факту лямбда-выражения являются в некотором роде сокращенной формой внутренних анонимных классов, которые ранее применялись в Java.

  • Отложенное выполнение (deferred execution) лямбда-выражения- определяется один раз в одном месте программы, вызываются при необходимости, любое количество раз и в произвольном месте программы.

  • Параметры лямбда-выражения должны соответствовать по типу параметрам метода функционального интерфейса:

    text
    operation = (int x, int y) -> x + y;
    //При написании самого лямбда-выражения тип параметров разрешается не указывать:
    (x, y) -> x + y;
    //Если метод не принимает никаких параметров, то пишутся пустые скобки, например,
    () -> 30 + 20;
    //Если метод принимает только один параметр, то скобки можно опустить:
    n -> n * n;
  • Конечные лямбда-выражения не обязаны возвращать какое-либо значение.
    text
    interface Printable {
        void print(String s);
    }
     
    public static void main(String[] args) {
        Printable printer = s -> System.out.println(s);
        printer.print("Hello, world");
    }

     

  • Блочные лямбда-выражения обрамляются фигурными скобками. В блочных лямбда-выражениях можно использовать внутренние вложенные блоки, циклы, конструкции ifswitch, создавать переменные и т.д. Если блочное лямбда-выражение должно возвращать значение, то явным образом применяется оператор return:
    text
    Operationable operation = (int x, int y) -> {       
        if (y == 0) {
            return 0;
        }
        else {
            return x / y;
        }
    };

     

  • Передача лямбда-выражения в качестве параметра метода:
    text
    interface Condition {
        boolean isAppropriate(int n);
    }
    
    private static int sum(int[] numbers, Condition condition) {
        int result = 0;
        for (int i : numbers) {
            if (condition.isAppropriate(i)) {
                result += i;
            }
        }
        return result;
    }
    
    public static void main(String[] args) {
        System.out.println(sum(new int[] {0, 1, 0, 3, 0, 5, 0, 7, 0, 9}, (n) -> n != 0));
    } 

     

Oct. 21, 2023, Источник

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы