发表于: 2018-01-27 22:34:51

1 519


今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了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的新特性还是有必要进行一下学习.



返回列表 返回列表
评论

    分享到