前言
Java 8的一个大亮点是引入Lambda表达式,使用它设计的代码会更加简洁。当开发者在编写Lambda表达式时,也会随之被编译成一个函数式接口。下面这个例子就是使用Lambda语法来代替匿名的内部类,代码不仅简洁,而且还可读。
正文
1.什么是Lambda?
“Lambda 表达式”(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)
我们知道,对一个java变量赋值
但是如果你想把一个代码块赋给一个Java变量,怎么做到呢?
比如,把右边的那块代码,赋给左边的叫做aBlockOfCode的变量:
这在Java 8之前是做不到的。Java 8问世之后,利用Lambda特性就可以做到了。
当然这还不算最简洁的写法,为了使代码更简练,我们可以做以下操作,移除没用的声明
这样,我们成功优雅地把一个代码块赋给了一个变量。而这个代码块,或者说这个被赋给一个变量的函数,就是一个Lambda表达式。
但这里仍然存在一个问题,那就是变量aBlockOfCode的类型应该是什么?
在Java 8里面,所有的Lambda的类型都是一个接口,而Lambda表达式本身,也就是那个代码块,需要是这个接口的实现。这是我认为理解Lambda的一个关键点所在,简言之,Lambda表达式本身就是一个接口的实现。这样说可能还是有些困惑,继续举例。
我们给aBlo