Lambda表达式。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jnshu_it/article/details/84917248

这里是修真院后端小课堂,每篇分享文从

【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】

八个方面深度解析后端知识/技能,本篇分享的是:

Lambda表达式。

https://url.cn/544DLQl?sf=uri

https://it-xzy.github.io/JAVA-NEW/20181107-D-JAVA-10.html#/

大家好,我是IT修真院郑州分院第11期的学员何爽,一枚正直纯洁善良的后端程序员,今天给大家分享一下,修真院官网java(职业)任务10,深度思考中的知识点——Lambda表达式。

1.背景介绍

一、简介

(注:虽然看着很先进,其实Lambda表达式的本质只是一个"语法糖",由编译器推断并帮你转换包装为常规的代码,因此你可以使用更少的代码来实现同样的功能。

建议不要乱用,因为这就和某些很高级的黑客写的代码一样,简洁,难懂,难以调试,维护人员想骂娘.)

Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。

Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及java.util.stream 包。 流(stream)就如同迭代器(iterator),但附加了许多额外的功能。 

总的来说,lambda表达式和 stream 是自Java语言添加泛型(Generics)和注解(annotation)以来最大的变化。

Lambda其实就是匿名方法;Java会在背后,悄悄的,把这些都还原成匿名类方式。匿名类--指的是在声明一个类的同时实例化它,使代码更加简洁精练。

匿名类?

匿名类指的是在声明一个类的同时实例化它,使代码更加简洁精练通常情况下,要使用一个接口或者抽象类,都必须创建一个子类有的时候,为了快速使用,直接实例化一个抽象类,

并“当场”实现其抽象方法。既然实现了抽象方法,那么就是一个新的类,只是这个类,没有命名。这样的类,叫做匿名类。

2.知识剖析

lambda运算符:

所有的lambda表达式都是用新的lambda运算符 " -> ",可以叫他,“转到”或者 “成为”。

运算符将表达式分为两部分,左边指定输入参数,中间是箭头,右边是lambda的主体。

(参数类型 参数名)->{代码主体}

1.标准写法:(类型1 参数名1,类型2 参数名2...)->{代码块}

2.参数类型可以推断 :(参数名1,参数名2...)->{代码块}

3.存在多行代码 :(参数名1,参数名2...)->{代码行;--代码行}

4.单个参数并可推断类型 :(参数名1)->{代码块}

5.方法引用 :System.out::println

6,没有参数 :()->{代码块}

lambda表达式与匿名内部类:

匿名内部类也就是没有名字的内部类正因为没有名字,所以匿名内部类只能使用一次,它通常用来简化代码编写

但使用匿名内部类还有个前提条件:必须继承一个父类或实现一个接口PS:Lambda表达式并不能取代所有的匿名内部类,只能用来取代函数接口(Functional Interface)的简写。

lambda表达式与函数式接口:

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

任何接口,如果只包含唯一 一个抽象方法,那么它就是一个Functional Interface。

之前它们被称为 SAM类型,即 单抽象方法类型(Single Abstract Method)。

接口中的方法默认就是public abstract的。

函数式接口需要添加:@FunctionalInterface

3.常见问题 

1.如果lambda只能使用一次,那么它的优势又有什么呢?

2.我们为什么需要Lambda表达式呢?

4.解决方案

1.

一.lamada表达式简化了接口实现的过程,使得代码结构更加简洁。

二.lamada的使用非常灵活。

2.

lambda表达式通过实现匿名类的方式对接口或者类进行了实例化,但是因为实例化的对象没有名字,也就无法进行二次使用,所以lambda表达式只能够使用一次,也就只能够使用或者执行一个方法。

简单讲就是:用lambda表达式构造方法实体,等价于实现了接口中的方法,最终lambda表达式的返回值就是接口的实现类。

5.编码实战

6.扩展思考

lambda的优点:

与匿名类 概念相比较,Lambda其实就是匿名方法,这是一种把方法作为参数进行传递的编程思想。代码很简洁。

lambda有缺点吗?

1. 可读性差,与啰嗦的但是清晰的匿名类代码结构比较起来,Lambda表达式一旦变得比较长,就难以理解。

2. 不便于调试,很难在Lambda表达式中增加调试信息,比如日志。

3. 版本支持,Lambda表达式在JDK8版本中才开始支持,如果系统使用的是以前的版本,考虑系统的稳定性等原因,而不愿意升级,那么就无法使用。

7.参考文献

https://www.jianshu.com/p/4e858f2084b8

https://blog.csdn.net/KOKjock/article/details/80114900

https://www.cnblogs.com/franson-2016/p/5593080.html

8.更多讨论

Q1:提问人wyq:

lambda还有什么缺点吗?

A1:回答人(h):

lambda表达式的可读性比较差,因此导致其后期的维护工作非常难做。

Q2:提问人:zhh

Lambda表达式有什么作用?

A2:回答人(h):

最直观的作用就是使得代码变得异常简洁。

Q3:提问人:zyq

哪里可以使用Lambda表达式?

A3:回答人(h):

你可以在函数式表达式接口上使用Lambda表达式。

9.鸣谢

此教程是自我查找资料的基础上完善而成。

10.结束语

今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~

PPT链接 视频链接

更多内容,可以加入IT交流群565734203与大家一起讨论交流

这里是技能树·IT修真院:https://www.jnshu.com,初学者转行到互联网的聚集地

猜你喜欢

转载自blog.csdn.net/jnshu_it/article/details/84917248