本帖最后由 小春同学 于 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学习笔记(三)_选择与循环控制
|