Java 8 - Lambda表达式

Lambda表达式在Java 8中引入,并被吹捧为Java 8的最大特性.Lambda表达式有助于函数式编程,并简化了很多开发.

语法

lambda表达式的特征在于以下语法.

parameter -> expression body

以下是lambda表达式的重要特征.

  • 可选类型声明 : 无需声明参数的类型.编译器可以从参数的值推断出相同的值.

  • 参数 : 的可选括号;无需在括号中声明单个参数.对于多个参数,需要括号.

  • 可选花括号 : 如果正文包含单个语句,则无需在表达式主体中使用花括号.

  • 可选返回关键字 : 如果正文具有单个表达式以返回值,则编译器会自动返回该值.需要使用大括号来表示表达式返回一个值.

Lambda表达式示例

创建以下Java程序使用您选择的任何编辑器,例如C:\> JAVA.

Java8Tester.java

 
 public class Java8Tester { 
 public static void main(String args []){
 Java8Tester tester = new Java8Tester(); 
//带类型声明
 MathOperation addition =(int a,int b) - > a + b; 
//没有类型声明
 MathOperation减法=(a,b) - > a  -  b; 
//带有返回语句和大括号
 MathOperation multiplication =(int a,int b) - > {return a * b; }; 
//没有return语句且没有花括号
 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,减法)); 
 System.out.println("10 x 5 ="+ tester.operate(10,5,乘法)); 
 System.out.println("10/5 ="+ tester.operate(10,5,division)); 
//无括号
 GreetingService greetService1 = message  - > 
 System.out.println("你好"+消息); 
//带括号
 GreetingService greetService2 =(message) - > 
 System.out.println("你好"+消息); 
 greetService1.sayMessage("Mahesh"); 
 greetService2.sayMessage("Suresh"); 
} 
接口MathOperation {
 int operation(int a,int b); 
} 
 interface GreetingService {
 void sayMessage(String message); 
} 
 private int操作(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

以下是上述示例中要考虑的重点.

  • Lambda表达式主要用于定义内联实现功能接口,即仅使用单一方法的接口.在上面的例子中,我们使用了各种类型的lambda表达式来定义MathOperation接口的操作方法.然后我们定义了GreetingService的sayMessage的实现.

  • Lambda表达式消除了对匿名类的需要,并为Java提供了一个非常简单但功能强大的函数编程功能.

范围

使用lambda表达式,可以引用任何最终变量或有效的最终变量(仅分配一次).如果第二次为变量赋值,则Lambda表达式抛出编译错误.

范围示例

使用任何编辑器创建以下Java程序您选择的,例如,C:\> JAVA.

Java8Tester.java

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

它应该产生以下输出 :

Hello! Mahesh