Java8新特性之Lambda表达式

Java8版本给我们带来了一些经验的新特性,让我们这些辛苦的码农们体验到编程更快,更简,更紧凑的乐趣。废话不多说,下面对Java8的一些重要的新特性,比如Lambda、Stream、Optional等功能展开描述。

这章先介绍一下Lambda表达式

介绍:Lambda本质上是一个匿名函数,我们可以像传递数据(对象,基本数据类型等)一样传递Lambda表达式。这样,我们的代码更简洁、紧凑、灵活,从而使Java的表达能力得到了极大的提升。

比如:

匿名内部类(6行代码):

Java8新特性之Lambda表达式_第1张图片

Lambda表达式(1行代码):

Java8新特性之Lambda表达式_第2张图片

怎么样,是不是简洁多了。不要急,Lambda的表达能力不局限于此,下面我们一起细细展开

1、函数式接口

可以用Lambda表达式的接口叫做函数式接口,那么函数式接口满足哪些条件呢?

①只有一个抽象方法。

②我们可以使用@FunctionalInterface注解来强制要求这个函数式接口只有一个抽象方法。如果不满足,编译器提示不通过。(这个注解不是必须,只是起到强制一个抽象方法的作用,类似于方法重写的@override注解)

2、Lambda的表达语法

Lambda在Java语言中引入了一种新的操作符,“->”,我们称之为“箭头操作符”或者“Lambda操作符”。它将Lambda表达式划分为两个部分:

左侧:Lambda表达式的所有参数

右侧:Lambda体,即Lambda表达式所要执行的功能。

下面例举一些常用的格式:

①格式一:无参,无返回值

Java8新特性之Lambda表达式_第3张图片

②格式二:只有一个参数

Java8新特性之Lambda表达式_第4张图片

③格式三:只有一个参数时,参数的小括号可以省略

Java8新特性之Lambda表达式_第5张图片

④格式四:两个参数,并且有返回值

Java8新特性之Lambda表达式_第6张图片

⑤当Lambda体只有一天返回语句时,return和大括号可以省略

Java8新特性之Lambda表达式_第7张图片

⑥参数类型可以省略,因为编译器可以根据上下文推断得出,称作“类型推断”

Java8新特性之Lambda表达式_第8张图片

3、作为参数传递的Lambda表达式

对应的参数类型是与该Lambda表达式兼容的函数式接口

Java8新特性之Lambda表达式_第9张图片

4、Java内置四大核心函数式接口

Java8为我们内置了几个核心函数式接口,用它们可以满足我们遇到的绝大多数一般性的需求。

Java8新特性之Lambda表达式_第10张图片

5、其它一些接口

这些接口由四大核心函数式接口衍生而来,作为功能扩展和补充
Java8新特性之Lambda表达式_第11张图片

6、方法引用

当Lambda体有其它方法已经实现时,可以使用方法引用。

注意:方法引用的方法参数列表必须与实现的函数式接口抽象方法的参数类别一致,返回值也一致。

我们用“类名/对象名::方法名”符号表示方法引用,将类名/对象名与方法名区分开来。主要有以下三种格式:

①类名::静态方法名(ClassName::StaticMethodName)

--方法引用的方法参数列表必须与实现的函数式接口抽象方法的参数类别一致,返回值也一致。

②对象名::实例方法名;(InstanceName::InstanceMethodName)

--方法引用的方法参数列表必须与实现的函数式接口抽象方法的参数类别一致,返回值也一致。

③类名::实例方法名。(ClassName::InstanceMethodName)

--函数式接口的第一个参数是引用方法体中的调用对象,其它参数依次为引用方法体的参数,返回值也一致。

Java8新特性之Lambda表达式_第12张图片

6、构造器引用

格式:类名::new(ClassName::new)

引用的构造器的参数与函数式接口的构造器的参数一致。

Java8新特性之Lambda表达式_第13张图片

Java8新特性之Lambda表达式_第14张图片

7、数组引用

格式:类型[]::new(type[]::new)

函数式接口的抽象方法的参数为创建数组的大小

Java8新特性之Lambda表达式_第15张图片

你可能感兴趣的:(Java8新特性)