首页 >> 大全

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

2022-07-29 大全 142 作者:考证青年

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

面试与实战:什么是 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?该如何使用?

现在您需要打印出列表中以“Z”开头的所有人员。

原生态写法:定义两个函数接口,定义一个静态函数,调用静态函数,给参数赋值表达式。

面试与实战:什么是 Lambda?该如何使用?

这段代码其实更简洁,但是我们能不能更简洁一点呢?

当然。在 Java 8 中有一个功能接口包,它定义了大量可能的功能接口 (java.util. ​​(Java SE 8))。

因此,我们在这里根本不需要定义和这两个函数式接口,我们可以直接使用Java 8 函数式接口包中的和——因为它们的接口定义和/或实际上是相同的。

面试与实战:什么是 Lambda?该如何使用?

第一种简化——使用功能接口包:

面试与实战:什么是 Lambda?该如何使用?

静态函数中的 for each 循环其实很烦人。在这里您可以使用内置的 () 来代替。() 本身可以接受一个参数。

简化的第二步 - 用 .() 替换循环:

面试与实战:什么是 Lambda?该如何使用?

由于静态函数只是对List的单一操作,这里我们可以去掉静态函数,使用()特性来完成。() 的几个方法都是接受等参数(java.util.(Java SE 8))。上面的内容你明白了,()这里就很容易理解了,不用多解释了。

第 3 步简化 - 使用 () 代替静态函数:

面试与实战:什么是 Lambda?该如何使用?

与最初的写作相比,这里非常非常简洁。但是如果我们要求改变它,它就会变成打印这个人的所有信息,并且 p -> .out.(p); 然后可以用来继续简化。所谓,就是替换已经写好的其他/Class。格式如下:

第 4 步简化 - 如果是 (p),您可以利用替换中的表达式:

面试与实战:什么是 Lambda?该如何使用?

这基本上是可以写的最简洁的版本。

合作可以让Java对null的处理极其优雅

这里假设我们有一个,其中之一:

面试与实战:什么是 Lambda?该如何使用?

如果不组合使用,不会让原本繁琐的空检查变得简单。

面试与实战:什么是 Lambda?该如何使用?

只有结合使用,才能显示出它的真正威力!

下面我们来比较一下Java 8的+和传统Java在null处理上的区别,下面有四种常见的null处理。

情况 1 - 如果存在则干燥

面试与实战:什么是 Lambda?该如何使用?

情况2 - 如果存在则返回,如果不存在则返回屁

面试与实战:什么是 Lambda?该如何使用?

情况 3 - 如果存在则返回,如果不是由函数生成

面试与实战:什么是 Lambda?该如何使用?

案例 4 - 致命的串行空值检查

面试与实战:什么是 Lambda?该如何使用?

从以上四种情况可以清楚地看出,+可以让我们少写很多块。尤其是案例4中致命的串行null检查,传统的java写法冗长难懂,而new+则清新脱俗,清晰简洁。

仍然有一些关于 Java 的讨论和学习。比如如何,如何利用特性来进行等等。

3.总结

想要更深入的了解,只有一个方法:练习,练习是掌握一门技术的第一步,加油,现在就开始。

郑重声明:本文版权归原作者所有,转载文章仅出于传播更多信息之目的。如作者信息标注有误,请尽快联系我们修改或删除,谢谢。

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了