lambda
1.lambda的基本格式
- (parm1,parm2,…) -> {TODO} 其中参数可以为空,即用()表示,()->{TODO},只有一个参数时()可以省略,如:e->{TODO} 其中->右边,如果只有一条语句可以省略{},当有多条语句时,需要使用{}. 单条语句:
1 |
|
多条语句:
1 |
|
我们这里写的
什么时候可以使用lambda呢
当我们有一个接口,并且这个接口只有一个方法(这里说的不太准确,下面会进行说明),比如:
1 |
|
这是只有一个接口的方法,然后我们我们可以这样使用它:
1 |
|
当然接口里的方法可能有时不止一个,比如以下情况:
- 情况1,接口中有default修饰的方法是不影响lambda的使用:
1 |
|
default修饰符也是java8加的新特性,但是他修饰的必须有方法体,感觉和抽象类有些相似。
- 情况2,接口中有static修饰的方法
1 |
|
使用static和default一样都需要有方法体。
一般我们要是定义一个函数式编程接口时,最好加一个’@FunctionInterface’这个注解,他标明了这个接口是一个函数式接口,当该接口的方法多于一个的时候,会提示报错。
用例子可能更好理解
1 |
|
我们分析一下为什么可以这样用 通过传统方式看出我们需要实现accept()这个接口,这个接口需要一个参数所以我设了一个e(这个参数任意起名字),接口需要有一个具体操作,因为我们想将list的每一项输出,所以加了一句System.out.println(e).可以看出我们需要做的就是实现这个接口的方法体。