Привет! Эта статья поможет вам начать работу с Lambdas в Java.

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

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

Функциональные интерфейсы — интерфейсы только с одним абстрактным методом

примеры: Runnable, ActionListener и т. д.

Давайте начнем наше путешествие по Lambdas здесь:

С чего начать:

interface Conversion { void convert(String text);}

Приведенный выше интерфейс имеет один абстрактный метод convert . Он принимает String и ничего не возвращает. Это означает, что это позволяет нам по-прежнему определять поведение, когда мы используем это.

Class Lambdas {
public static void main(String[] args){
  Conversion conversion = (text) -> { 
           // This lambda takes in text and does something        
    }
 }
}

В приведенном выше классе лямбда позволяет принимать входную строку и позволяет нам определить поведение в { } . Обратите внимание, что text не является определенной переменной в классе. Он просто действует как заполнитель для строки, которая будет передана лямбда-выражению и разрешит доступ к ней в блоке { }.

Определение лямбды:

Теперь давайте определим функциональность в лямбда-блоке.

Conversion conversion = (text) -> { 
           System.out.println("You passed"+ text + " as an input");       
    }

Теперь лямбда, определенная выше, принимает ввод и печатает переданный ввод. с дополнительным текстом в лямбда-блоке { }

Как это использовать?

Class Lambdas {
public static void main(String[] args){
  Conversion conversion = (text) -> { 
           System.out.println("You passed"+ text + " as an input");        
    }
 }
  conversion.convert("Learning Lambdas");
}

На выходе будет напечатано «Вы передали Learning Lambdas в качестве входных данных».

Функции высшего порядка

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

Допустим, вам нужно вычислить площадь или периметр квадрата. Теперь вместо определения двух функций, которые делают это по отдельности. Мы можем определить функцию высокого порядка, которая принимает сторону квадрата в качестве входных данных, а также принимает лямбда/функцию в качестве других входных данных, что оставляет вызывающей стороне возможность определить поведение, т. е. вычислить или вычислить периметр.

Шаг 1: Определение интерфейса / поиск существующего интерфейса в соответствии с требованиями

interface Calculate {
    int compute(int side);
}

Интерфейс Calculate определяет вычисление метода, который принимает int и возвращает int . Мы можем использовать это в качестве рычага, чтобы определить лямбда, которая принимает число и выполняет некоторые вычисления, это может быть все, что мы хотим, а затем возвращать int в конце.

Шаг 2: Определение лямбды

int sideOfSquare = 5 ;
Calculate calculateArea = (side) -> {
    return side * side;
};

Calculate calculatePerimeter = (side) -> {
    return 4 * side;
};

теперь эти лямбда-выражения принимают сторону и выполняют вычисления площади или стороны. Опять же, не путайте с `side` в лямбда-выражениях некоторую уже определенную переменную-член класса или метода. Это означает ввод, который будет передан при вызове лямбды.

Шаг 3: Определение функции высшего порядка

Функция высшего порядка — это функция, которая либо принимает на вход другую функцию /лямбда, либо возвращает любую из них. Давайте определим функцию, которая позволяет нам принимать лямбда

int calculate(int side, Calculate cal) {
    // return an Int
}

Шаг: 4 Вызов лямбды

Теперь у нас есть метод calculate, который принимает side и лямбду в качестве входных данных, и теперь мы можем вызывать лямбду и возвращать вычисленные результаты.

int calculate(int side, Calculate cal) {
    return cal.compute(side);
}

оператор cal.compute(side) — это оператор, в котором вызывается лямбда.

На этом базовое введение в лямбда-выражения завершено.

Надеюсь, эта статья поможет вам начать работу с Lambdas. С Lambdas мы можем делать гораздо больше.

Продолжайте учиться и продолжайте исследовать :-)