Как начать использовать лямбда-выражения в Java

--

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

До того как в JDK 8 была добавлена ​​поддержка лямбда-выражений, я достаточно редко использовал их в таких языках, как C# и C++. После того как этот функционал был добавлен ​​в Java, я начал изучать его поближе. Лямбда-выражений добавляют элементы синтаксиса, которые увеличивают выразительность Java.
В этой статье я хочу сосредоточиться на основных концепциях, с которыми вам необходимо ознакомиться, чтобы вы могли начать использовать лямбда-выражения в своем коде уже сегодня.

QuickStart

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

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

Функциональный интерфейс — это интерфейс, который содержит один и только один абстрактный метод. Если вы посмотрите на определение стандартного Java-интерфейса Runnable, вы заметите, как он попадает в определение функционального интерфейса, поскольку он определяет только один метод: run().
В приведенном ниже примере кода метод computeName является неявно абстрактным и единственным определенным методом, что делает MyName функциональным интерфейсом.

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

(n) -> n * n

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

Переменные morningGreeting и EveningGreeting, строки 6 и 7 в приведенном выше примере, ссылаются на интерфейс MyGreeting и определяют различные фразы приветствия.
При написании лямбда-выражения также можно явно указать тип параметра в выражении следующим образом:

Блочные лямбда-выражений

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

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

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

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

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

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

--

--