这里是修真院后端小课堂,每篇分享文从
【 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)结束语:
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~