Основные концепции, с которыми необходимо ознакомиться
До того, как в 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.