JDK 8——Lambda表达式介绍


  Lambda表达式是JDK 8中一个重要的新特性,它使用一个清晰简洁的表达式来表达一个接口,同时Lambda表达式也简化了对集合以及数组数据的遍历、过滤和提取等操作。下面,本篇文章就对Lambda表达式进行简要介绍,并进行演示说明。

1. Lambda表达式入门

  匿名内部类存在的一个问题是,如果匿名内部类的实现非常简单,例如只包含一个抽象方法的接口,那么匿名内部类的语法仍然显得比较冗余。为此,JDK 8中新增了一个特性Lambda表达式,这种表达式只针对有一个抽象方法的接口实现,以简洁的表达式形式实现接口功能来作为方法参数。
  一个Lambda表达式由三个部分组成,分别为参数列表、“->”和表达式主体,其语法格式如下:

 ([数据类型 参数名,数据类型 参数名,...]) -> {表达式主体}

  从上述语法格式上看,Lambda表达式的书写非常简单,下面针对Lambda表达式的组成部分进行简单介绍,具体如下:
  (1)([数据类型 参数名,数据类型 参数名,...]):用来向表达式主体传递接口方法需要的参数,多个参数名中间必须用英文逗号“,”进行分隔;在编写Lambda表达式时,可以省略参数的数据类型,后面的表达式主体会自动进行校对和匹配;同时,如果只有一个参数,则可以省略括号“()”。
  (2)->:表示Lambda表达式箭牌,用来指定参数数据指向,不能省略,且必须用英文横线和大于号书写。
  (3){表达式主体}:由单个表达式或语句块组成的主体,本质就是接口中抽象方法的具体实现,如果表达式主体只有一条语句,那么可以省略包含主体的大括号;另外,在Lambda表达式主体中允许有返回值,当只有一条return语句时,也可以省略return关键字。
  了解了Lambda表达式的语法后,接下来编写一个示例文件对Lambda表达式的基本使用进行介绍,具体代码如下所示。

 1	// 定义动物类接口
 2	interface Animal { 
 3		void shout(); // 定义方法shout()
 4	}
 5	public class Example22 {
 6		public static void main(String[] args) {
 7	       String name = "小花"; 
 8	       // 1、匿名内部类作为参数传递给animalShout()方法
 9		  animalShout(new Animal() { 
 10				 public void shout() { 
 11				    System.out.println("匿名内部类输出:"+name+"喵喵...");
 12				}
 13		  });
 14		  // 2、使用Lambda表达式作为参数传递给animalShout()方法
 15	       animalShout(()-> System.out.println("Lambda表达式输出:"
 16	                                                   +name+"喵喵..."));
 17		}
 18	    // 创建一个animalShout()静态方法,接收接口类型的参数
 19		public static void animalShout(Animal an) {
 20			an.shout();  
 21		}
 22	}

  运行结果下图所示。 alt   上述代码示例中,先定义了只有一个抽象方法的接口Animal,然后分别使用匿名内部类和Lambda表达式的方式实现了接口方法。从图中可以看出,使用匿名内部类和Lambda表达式都能实现接口中方法,但很显然使用Lambda表达式更加简洁和清晰。

用户想要评论,请先登录!