资深软件开发工程师,业余马拉松选手。
在了解Lambda之前,我们先回顾一下Java的方法。
Java的方法分为实例方法,例如定义的方法:
以及静态方法,例如定义的方法:
无论是实例方法,还是静态方法,本质上都相当于过程式语言的函数。例如C函数:
只不过Java的实例方法隐含地传入了一个变量,即实例方法总是有一个隐含参数。
函数式编程(Functional Programming)是把函数作为基本运算单元,函数可以作为变量,可以接收函数,还可以返回函数。历史上研究函数式编程的理论是Lambda演算,所以我们经常把支持函数式编程的编码风格称为Lambda表达式。
在Java程序中,我们经常遇到一大堆单方法接口,即一个接口只定义了一个方法:
- Comparator
- Runnable
- Callable
以为例,我们想要调用时,可以传入一个实例,以匿名类方式编写如下:
上述写法非常繁琐。从Java 8开始,我们可以用Lambda表达式替换单方法接口。改写上述代码如下:
观察Lambda表达式的写法,它只需要写出方法定义:
其中,参数是,参数类型可以省略,因为编译器可以自动推断出类型。表示方法体,所有代码写在内部即可。Lambda表达式没有定义,因此写法非常简洁。
如果只有一行的代码,完全可以用更简单的写法:
返回值的类型也是由编译器自动推断的,这里推断出的返回值是,因此,只要返回,编译器就不会报错。
我们把只定义了单方法的接口称之为,用注解标记。例如,接口:
再来看接口:
虽然接口有很多方法,但只有一个抽象方法,其他的方法都是方法或方法。另外注意到是定义的方法,不算在接口方法内。因此,也是一个。
使用Lambda表达式实现忽略大小写排序。
下载练习
单方法接口被称为。
接收作为参数的时候,可以把实例化的匿名类改写为Lambda表达式,能大大简化代码。
Lambda表达式的参数和返回值均可由编译器自动推断。
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.bianchenghao6.com/java-jiao-cheng/17873.html