Lambda表达式
这里是修真院后端小课堂,每篇分享文从 【背景介绍】【知识剖析】【常见问题】【解决方案】【编码实战】【扩展思考】【更多讨论】【参考文献】 八个方面深度解析后端知识/技能,本篇分享的是: 【 Lambda表达式】 大家好,我是IT修真院上海分院第8期的学员朱明星,一枚正直纯洁善良的JAVA程序员,今天给大家分享一下,修真院官网任务十,深度思考中的知识点——Lambda表达式 (1)背景介绍: 为什么要引入lambda表达式?Java是面向对象语言,要在Java中传递一段代码段需要构造对象,这个对象的类需要一个方法能包含所需的代码。Lambda是函数式编程,允许把函数作为一个方法的参数,可以将方法像参数一样传递。使用 Lambda 表达式可以使代码变的更加简洁紧凑。 (2)知识剖析: 语法格式 参数 -> 表达式 (parameters) -> expression (parameters) -> { statements; 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。 1)如果代码要完成的计算无法放在一个表达式中,就可以像写方法一样,把这些代码放在{}中,并包含显式的return语句。例如: (String first,String second) ->?? ?? ?if (first.length() < second.length()) return -1; ?? ?else if (first.length() > second.length()) return 1; ?? ?else return 0; } 2)即使lambda表达式没有参数,仍然要提供空括号,就像无参数方法一样。例如: () -> { for (int i = 0; i <= 5; i++) System.out.println(); } 3)如果可以推导出一个lambda表达式的类型,则可以忽略其类型。例如: Comparator < String > comp = (first,second) -> first.length() - second.length(); 编译器可以推导出first和second必然是字符串,因为这个lambda表达式将赋给一个字符串比较器。 (4)如果方法只有一个参数,而且这个参数的类型可以推导得出,可以忽略小括号。例如: x -> 2 * x Lambda表达式需要函数式接口的支持 (3)常见问题: 什么是函数式接口? (4)解决方案: 只有一个抽象方法的接口,可以用@FunctionalInterface修饰 (5)编码实战: 见视频 (6)拓展思考: lambda表达式的性能问题 (7)参考文献: 精通Spring4.X企业应用开发实战 (8)更多讨论: Q1.lambda表达式和匿名类什么关系? A1:与匿名类 概念相比较,Lambda其实就是匿名方法,这是一种把方法作为参数进行传递的编程思想。代码很简洁 Q2.如果lambda只能使用一次,那么它的优势又有什么呢 A2:lamada表达式简化了接口实现的过程,使得代码结构更加简洁。lamada的使用非常灵活。 Q3.我们为什么需要Lambda表达式呢? A3:lambda表达式通过实现匿名类的方式对接口或者类进行了实例化,但是因为实例化的对象没有名字,也就无法进行二次使用,所以lambda表达式只能够使用一次,也就只能够使用或者执行一个方法。 (10)结束语: 今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~ PPT链接?视频链接 更多内容,可以加入IT交流群565734203与大家一起讨论交流 这里是技能树·IT修真院:,初学者转行到互联网的聚集地 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |