开发手册 欢迎您!
软件开发者资料库

Java 8 - Lambda表达式

Java 8 Lambda表达式 - 从简单和简单的步骤学习Java 8,从基本到高级概念,包括概述,环境设置,Lambda表达式,方法参考,功能接口,默认方法,Streams,可选类,Nashorn JavaScript引擎,新日期Time API,Base64。

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 = 1510 - 5 = 510 x 5 = 5010 / 5 = 2Hello MaheshHello 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