Основные концепции, с которыми необходимо ознакомиться

До того, как в JDK 8 была добавлена ​​поддержка лямбда-выражений, я использовал только их примеры на таких языках, как C # и C ++.

После того, как эта функция была добавлена ​​в Java, я начал изучать их поближе.

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

Быстрое введение

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

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

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

Функциональный интерфейс - это интерфейс, содержащий один и только один абстрактный метод.

Если вы посмотрите на определение стандарта Java Runnable interface, вы заметите, как он попадает в определение функционального интерфейса, потому что он определяет только один метод: run().

В приведенном ниже примере кода метод computeName является неявно абстрактным и является единственным определенным методом, что делает MyName функциональный интерфейс.

Оператор стрелки

Лямбда-выражения вводят новый оператор стрелки -> в Java. Он делит лямбда-выражения на две части:

(n) -> n*n

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

Правая сторона - это тело лямбда, которое определяет действия лямбда-выражения. Было бы полезно думать об этом операторе как о «становится». Например, «n становится n * n» или «n становится n в квадрате».

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

Переменные morningGreeting и eveningGreeting, строки 6 и 7 в приведенном выше примере, ссылаются на интерфейс MyGreeting и определяют различные выражения приветствия.

При написании лямбда-выражения также можно явно указать тип параметра в выражении следующим образом:

Блокировать лямбда-выражения

До сих пор я рассмотрел образцы лямбда-выражений с одним выражением. Существует другой тип выражения, используемый, когда код справа от оператора стрелки содержит более одного оператора, известного как block lambdas:

Общие функциональные интерфейсы

Лямбда-выражение не может быть универсальным. Но функциональный интерфейс, связанный с лямбда-выражением, может. Можно написать один общий интерфейс и обрабатывать разные типы возвращаемых данных следующим образом:

Лямбда-выражения как аргументы

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

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

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

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