Lambda表达式。
这里是修真院后端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析后端知识/技能,本篇分享的是: 【 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修真院:,初学者转行到互联网的聚集地 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |