大家好,我是IT修真院成都分院第9期的JAVA学员杨以杰,一枚正直纯洁善良的java程序员。
1.背景介绍
什么是lambda表达式
lambda表达式是JAVA8中提供的一种新的特性,它支持JAVA也能进行简单的“函数式编程”。
它是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。
2.知识剖析
我们在此抽象一下lambda表达式的一般语法:
![](https://img.haomeiwen.com/i9114867/d6b0082d4978e1fd.png)
上面的lambda表达式语法可以认为是最全的版本,写起来还是稍稍有些繁琐。别着急,下面陆续介绍一下lambda表达式的各种简化版:
1. 参数类型省略–绝大多数情况,编译器都可以从上下文环境中推断出lambda表达式的参数类型。这样lambda表达式就变成了:
![](https://img.haomeiwen.com/i9114867/557cfd33ed798ded.png)
当lambda表达式的参数个数只有一个,可以省略小括号。lambda表达式简写为:
![](https://img.haomeiwen.com/i9114867/159ed20a54941ee8.png)
当lambda表达式只包含一条语句时,可以省略大括号、return和语句结尾的分号。lambda表达式简化为
![](https://img.haomeiwen.com/i9114867/fedfc981a7613695.png)
3.常见问题
什么时候可以使用它?
4.解决方案
先说一个名词的概念
函数式接口:Functional Interface.
定义的一个接口,接口里面必须 有且只有一个抽象方法 ,这样的接口就成为函数式接口。
在可以使用lambda表达式的地方,方法声明时必须包含一个函数式的接口。
(JAVA8的接口可以有多个default方法)
任何函数式接口都可以使用lambda表达式替换。
例如:ActionListener、Comparator、Runnable
lambda表达式只能出现在目标类型为函数式接口的上下文中。
注意:
此处是只能!!!
意味着如果我们提供的这个接口包含一个以上的Abstract Method,那么使用lambda表达式则会报错。
这点已经验证过了。
场景:
这种场景其实很常见:
你在某处就真的只需要一个能做一件事情的函数而已,连它叫什么名字都无关紧要。
Lambda 表达式就可以用来做这件事。
7.参考文献
http://blog.csdn.net/jinzhencs/article/details/50748202
http://ifeve.com/lambda/
http://ifeve.com/stream/
PPT:https://ptteng.github.io/PPT/PPT-java/lambda%E8%A1%A8%E8%BE%BE%E5%BC%8F-yyj.html#/
视频:
undefined_腾讯视频
网友评论