发表于: 2018-01-27 22:34:51
1 520
今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin)
围绕小课堂进行了学习.
1.背景介绍
什么是lambda表达式
lambda表达式是JAVA8中提供的一种新的特性,它支持JAVA也能进行简单的“函数式编程”。
它是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。
2.知识剖析
我们在此抽象一下lambda表达式的一般语法:
上面的lambda表达式语法可以认为是最全的版本,写起来还是稍稍有些繁琐。别着急,下面陆续介绍一下lambda表达式的各种简化版:
1. 参数类型省略–绝大多数情况,编译器都可以从上下文环境中推断出lambda表达式的参数类型。这样lambda表达式就变成了:
当lambda表达式的参数个数只有一个,可以省略小括号。lambda表达式简写为:
当lambda表达式只包含一条语句时,可以省略大括号、return和语句结尾的分号。lambda表达式简化为
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/
明天计划的事情:(一定要写非常细致的内容)
RMI.....,任务8进3天了,结果都没干和任务相关的事情,今天总算把事情排完了..
遇到的问题:(遇到什么困难,怎么解决的)
null
收获:(通过今天的学习,学到了什么知识)
lambda表达式和stream这些1.8的新特性还是有必要进行一下学习.
评论