什么是 Lambda??该如何使用?

什么是?(如何使用它?)

什么是 Lambda??该如何使用?

文章插图
1.什么是?
我们知道,对于 Java 变量,我们可以为它分配一个“值” 。
什么是 Lambda??该如何使用?

文章插图
如果您想将“代码块”分配给 Java 变量怎么办?
例如,我想将右边的一段代码分配给一个名为的 Java 变量:
什么是 Lambda??该如何使用?

文章插图
在 Java 8 之前,这是不可能的 。但是在 Java 8 出现之后,使用特性,你可以做到 。
什么是 Lambda??该如何使用?

文章插图
当然,这不是一种非常简洁的写法 。所以,为了让这个赋值更有效率,我们可以去掉一些无用的声明 。
什么是 Lambda??该如何使用?

文章插图
通过这种方式,我们成功地非常优雅地将“一段代码”分配给了一个变量 。而“这段代码”,或者“这个函数赋值给一个变量”,就是一个表达式 。
但是这里还有一个问题,变量的类型应该是什么?
在 Java 8 中,所有类型都是一个接口,而表达式本身,“那段代码”,需要是这个接口的一个实现 。这是我认为理解的一个关键点,总之,表达式本身就是一个接口的实现 。直接说这个可能还是有点混乱,所以让我们继续这个例子 。
我们在上面添加一个类型:
什么是 Lambda??该如何使用?

文章插图
这种只需要实现一个接口函数的接口类型,我们称之为“函数式接口” 。为了避免后面的人在这个接口上添加接口函数,导致需要实现多个接口函数,成为“非函数式接口”,我们可以给这个添加一个声明@,这样别人就不能再添加新的了 。接口函数为:
什么是 Lambda??该如何使用?

文章插图
这样,我们就得到了一个完整的表达式声明:
2.表达式有什么作用?
最直观的效果就是让代码极其简洁 。
我们可以比较相同接口的表达式和传统 Java 实现:
什么是 Lambda??该如何使用?

文章插图
这两种符号本质上是等价的 。但显然,Java 8 的编写方式更加优雅简洁 。而且,由于可以直接赋值给变量,我们可以直接将其作为参数传递给函数,而传统Java必须对接口的实现和初始化有明确的定义:
什么是 Lambda??该如何使用?

文章插图
在某些情况下,这个接口实现只需要使用一次 。传统的 Java 7 必须要求你定义一个“污染环境”的接口实现,而 Java 8 的则干净得多 。
结合Lib、、()等新特性可以让代码更加简洁!推荐:完整的学习指南!
直接上示例 。
假设定义和列表
【什么是 Lambda??该如何使用?】给出了值 。
什么是 Lambda??该如何使用?

文章插图
现在您需要打印出列表中以“Z”开头的所有人员 。
原生态写法:定义两个函数接口,定义一个静态函数,调用静态函数,给参数赋值表达式 。
什么是 Lambda??该如何使用?

文章插图
这段代码其实更简洁,但是我们能不能更简洁一点呢?
当然 。在 Java 8 中有一个功能接口包,它定义了大量可能的功能接口 (java.util. ??(Java SE 8)) 。
因此,我们在这里根本不需要定义和这两个函数式接口,我们可以直接使用Java 8 函数式接口包中的和——因为它们的接口定义和/或实际上是相同的 。