Учебники

Java 8 — лямбда-выражения

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

Синтаксис

Лямбда-выражение характеризуется следующим синтаксисом.

parameter -> expression body

Ниже приведены важные характеристики лямбда-выражения.

  • Необязательное объявление типа — не нужно объявлять тип параметра. Компилятор может вывести то же самое из значения параметра.

  • Необязательные круглые скобки вокруг параметра — не нужно объявлять один параметр в круглых скобках. Для нескольких параметров требуются скобки.

  • Необязательные фигурные скобки — нет необходимости использовать фигурные скобки в теле выражения, если тело содержит один оператор.

  • Необязательное ключевое слово return — компилятор автоматически возвращает значение, если в теле есть одно выражение для возврата значения. Фигурные скобки необходимы, чтобы указать, что выражение возвращает значение.

Необязательное объявление типа — не нужно объявлять тип параметра. Компилятор может вывести то же самое из значения параметра.

Необязательные круглые скобки вокруг параметра — не нужно объявлять один параметр в круглых скобках. Для нескольких параметров требуются скобки.

Необязательные фигурные скобки — нет необходимости использовать фигурные скобки в теле выражения, если тело содержит один оператор.

Необязательное ключевое слово return — компилятор автоматически возвращает значение, если в теле есть одно выражение для возврата значения. Фигурные скобки необходимы, чтобы указать, что выражение возвращает значение.

Пример лямбда-выражений

Создайте следующую Java-программу, используя любой редактор по вашему выбору, например, в C: \> JAVA.

Java8Tester.java

Live Demo

public class Java8Tester {

   public static void main(String args[]) {
      Java8Tester tester = new Java8Tester();
		
      //with type declaration
      MathOperation addition = (int a, int b) -> a + b;
		
      //with out type declaration
      MathOperation subtraction = (a, b) -> a - b;
		
      //with return statement along with curly braces
      MathOperation multiplication = (int a, int b) -> { return a * b; };
		
      //without return statement and without curly braces
      MathOperation division = (int a, int b) -> a / b;
		
      System.out.println("10 + 5 = " + tester.operate(10, 5, addition));
      System.out.println("10 - 5 = " + tester.operate(10, 5, subtraction));
      System.out.println("10 x 5 = " + tester.operate(10, 5, multiplication));
      System.out.println("10 / 5 = " + tester.operate(10, 5, division));
		
      //without parenthesis
      GreetingService greetService1 = message ->
      System.out.println("Hello " + message);
		
      //with parenthesis
      GreetingService greetService2 = (message) ->
      System.out.println("Hello " + message);
		
      greetService1.sayMessage("Mahesh");
      greetService2.sayMessage("Suresh");
   }
	
   interface MathOperation {
      int operation(int a, int b);
   }
	
   interface GreetingService {
      void sayMessage(String message);
   }
	
   private int operate(int a, int b, MathOperation mathOperation) {
      return mathOperation.operation(a, b);
   }
}

Проверьте результат

Скомпилируйте класс с помощью компилятора javac следующим образом:

C:\JAVA>javac Java8Tester.java

Теперь запустите Java8Tester следующим образом —

C:\JAVA>java Java8Tester

Он должен произвести следующий вывод —

10 + 5 = 15
10 - 5 = 5
10 x 5 = 50
10 / 5 = 2
Hello Mahesh
Hello Suresh

Ниже приведены важные моменты, которые необходимо учитывать в приведенном выше примере.

  • Лямбда-выражения в основном используются для определения встроенной реализации функционального интерфейса, т. Е. Интерфейса только с одним методом. В приведенном выше примере мы использовали лямбда-выражения различных типов для определения метода работы интерфейса MathOperation. Затем мы определили реализацию sayMessage из GreetingService.

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

Лямбда-выражения в основном используются для определения встроенной реализации функционального интерфейса, т. Е. Интерфейса только с одним методом. В приведенном выше примере мы использовали лямбда-выражения различных типов для определения метода работы интерфейса MathOperation. Затем мы определили реализацию sayMessage из GreetingService.

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

Объем

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

Пример области применения

Создайте следующую Java-программу, используя любой редактор по вашему выбору, например, в C: \> JAVA.

Java8Tester.java

Live Demo

public class Java8Tester {

   final static String salutation = "Hello! ";
   
   public static void main(String args[]) {
      GreetingService greetService1 = message -> 
      System.out.println(salutation + message);
      greetService1.sayMessage("Mahesh");
   }
	
   interface GreetingService {
      void sayMessage(String message);
   }
}

Проверьте результат

Скомпилируйте класс с помощью компилятора javac следующим образом:

C:\JAVA>javac Java8Tester.java

Теперь запустите Java8Tester следующим образом —

C:\JAVA>java Java8Tester

Он должен произвести следующий вывод —