杨以杰
1.背景介绍
2.知识剖析
3.常见问题
4.解决方案
5.编码实战
6.扩展思考
7.参考文献
8.更多讨论
什么是lambda表达式
lambda表达式是JAVA8中提供的一种新的特性,它支持JAVA也能进行简单的“函数式编程”。 它是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。
我们在此抽象一下lambda表达式的一般语法:
上面的lambda表达式语法可以认为是最全的版本,写起来还是稍稍有些繁琐。别着急,下面陆续介绍一下lambda表达式的各种简化版: 1. 参数类型省略–绝大多数情况,编译器都可以从上下文环境中推断出lambda表达式的参数类型。这样lambda表达式就变成了:
当lambda表达式的参数个数只有一个,可以省略小括号。lambda表达式简写为:
当lambda表达式只包含一条语句时,可以省略大括号、return和语句结尾的分号。lambda表达式简化为
什么时候可以使用它?
先说一个名词的概念 函数式接口:Functional Interface. 定义的一个接口,接口里面必须 有且只有一个抽象方法 ,这样的接口就成为函数式接口。 在可以使用lambda表达式的地方,方法声明时必须包含一个函数式的接口。 (JAVA8的接口可以有多个default方法) 任何函数式接口都可以使用lambda表达式替换。 例如:ActionListener、Comparator、Runnable lambda表达式只能出现在目标类型为函数式接口的上下文中。 注意: 此处是只能!!! 意味着如果我们提供的这个接口包含一个以上的Abstract Method,那么使用lambda表达式则会报错。 这点已经验证过了。 场景: 这种场景其实很常见: 你在某处就真的只需要一个能做一件事情的函数而已,连它叫什么名字都无关紧要。 Lambda 表达式就可以用来做这件事。
::
百度百科
http://blog.csdn.net/jinzhencs/article/details/50748202
http://ifeve.com/lambda/
http://ifeve.com/stream/
By:杨以杰