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

Тело лямбда-выражений обычно состоят из единственного выражения. Такая разновидность тел называется телом выражения, а лямбда-выра­жения с телом выражения иногда еще называют одиночными.

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

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

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

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

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

Например, в блочном лямбда-выражении можно объявлять переменные, организовывать циклы, указывать операторы выбора if и switch, создавать вложенные блоки и т.д.

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

Кроме наличия в теле выражения нескольких операторов, блочные лямбда­ выражения применяются точно так же, как и одиночные лямбда-выражения.

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

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

Ниже приведен результат выполнения данной программы:

В данном примере программы обратите внимание на то, что в блочном лямбда ­выражении объявляется переменная result, организуется цикл for и указывает­ся оператор return.

Все эти действия вполне допустимы в теле блочного лямбда­ выражения. По существу, тело блока такого выражения аналогично телу метода.

Следует также иметь в виду, что когда в лямбда-выражении оказывается оператор return, он просто вызывает возврат из самого лямбда-выражения , но не из объ­емлющего его метода.

Ниже приведен еще один пример блочного лямбда-выражения. В данном при­мере программы изменяется на обратный порядок следования символов в строке.

Ниже приведен результат выполнения данной программы.

В данном примере программы в функциональном интерфейсе StringFunc объ­является метод func() принимающий параметр типа String и возвращающий значение типа String.

Следовательно, в лямбда-выражении reverse тип параме­тра str должен быть выведен как String. Обратите внимание на то, что метод charAt() вызывается для параметра str как для объекта.

И это вполне допустимо, поскольку этот параметр имеет тип String благодаря выведению типов.

Cоветуем вам следующее видео к просмотру