A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

2 个回复

正序浏览
很实用呢
回复 使用道具 举报
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马