黑马程序员技术交流社区
标题: 【重庆校区】Java8中的Lambda表达式 [打印本页]
作者: 小春同学 时间: 2017-11-18 01:02
标题: 【重庆校区】Java8中的Lambda表达式
本帖最后由 小春同学 于 2017-11-18 01:13 编辑
什么是Lambda表达式?
在Java8中,Oracle引入了Lambda表达式,简单说,你可以理解为匿名函数。我们可能听过匿名对象,匿名内部类,但很少听过匿名函数(方法)。
Ok,我们先来瞧瞧一个有名字的函数长什么样子?
[Java] 纯文本查看 复制代码
public int sum(int a, int b) {
System.out.println("正在执行加法运算");
return a+b;
}
匿名,那么去掉名字,(既然名字去掉了,外部不能随便调用,肯定是特殊情况下一次性使用的,既然如此,修饰符和返回值留在也没多大意义,一并去掉)
[Java] 纯文本查看 复制代码
(int a, int b) -> {
System.out.println("正在执行加法运算");
return a+b;
}
Yes,这就是一个基本的Lambda表达式,由三部分组成:
(1) 参数
(2) ->
(3) {} 代码块
Lambda的简写方式
其实有些东西是可以省略的。比如我们根据return语句,能推导出a,b的类型肯定是数值型数据。所以,可以简写为:
[Java] 纯文本查看 复制代码
(a, b) -> {
System.out.println("正在执行加法运算");
return a+b;
}
如果,如果,函数只有一个形参a,那么,小括号是可以不用写的,比如,可以再简写为:
[Java] 纯文本查看 复制代码
a -> {
System.out.println("正在执行加法运算");
return a+a;
}
如果,如果,{}代码块中只有一行代码,连大括号{}都可以不用写,比如:
[Java] 纯文本查看 复制代码
a -> return a+a;
其实,连return都可以省略,比如:
[Java] 纯文本查看 复制代码
a -> a+a;
注意:如果函数没有参数,则必须写上小括号,例如:
[Java] 纯文本查看 复制代码
() -> {
System.out.println("正在执行加法运算");
return a+b;
}
Lambda在Java中的实际应用
Lambda前提:一个接口只有一个抽象方法的情况下,咱们可以使用Lambda表达式来改写曾经的“有名函数”。
看一个代码片段:
Runnable接口只有run()一个抽象方法,符合Lambda表达式改写条件。run没有形参,必须写一对儿小括号,函数体写到一行中。先看传统方式,我们可以知道对象r中的重点其实就是run()方法中的那行输出语句。经过Lambda方式一改写,代码从6行缩减为1行。而且更清晰明了。
总结
为什么我学Java这么久了,没这么用过?那时因为Lambda是Java8才引入的,而市面上开发基本面向的是JDK6或者7,所以我们平常很少使用。但在其它语言中,例如Python或者Kotlin,当中就经常用得Lambda表达式。So,还是了解下比较好。
PS:如果对Kotlin比较赶兴趣的同学,可以关注我的Kotlin系列学习笔记。
【重庆校区】Kotlin学习笔记(一)_来!整个HelloWorld 【重庆校区】Kotlin学习笔记(二)_常见数据类型
【重庆校区】Kotlin学习笔记(三)_选择与循环控制
作者: xiongliu 时间: 2017-11-20 20:30



作者: 渝鱼鱼 时间: 2017-11-21 09:03
很实用呢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |