美文网首页IT修真院_JAVA
lambda表达式吃窥

lambda表达式吃窥

作者: 紫某某 | 来源:发表于2018-01-29 19:16 被阅读9次

大家好,我是IT修真院成都分院第9期的JAVA学员杨以杰,一枚正直纯洁善良的java程序员。

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/

PPT:https://ptteng.github.io/PPT/PPT-java/lambda%E8%A1%A8%E8%BE%BE%E5%BC%8F-yyj.html#/

视频:


undefined_腾讯视频

相关文章

网友评论

    本文标题:lambda表达式吃窥

    本文链接:https://www.haomeiwen.com/subject/zcjfzxtx.html