【硬核分享】Lambda 表达式(一)

1、前言

Lambda 表达式是一个匿名函数,有些类似与 JavaScript 中的闭包,把一个函数当作参数一样传递, 使用它设计的代码会更加简洁、更加灵活。许多主流语言,如 Java、C#、C++、Python 都支持 Lambda 表达式。

2、Lambda 表达式语法

lambda 表达式的语法格式如下:

  (parameters) -> expression
    或者
(parameters) ->{ statements; }

其中 -> 是 Lambda 表达式中新引入的语法操作符,称做 Lambda 操作符或箭头操作符,它将 Lambda 表达式分为
左右两个部分。

左侧:指定 Lambda 表达式需要的所有参数

右侧:指定 Lambda 体,即 Lambda 表达式要执行的功能

2.1、举个例子

  1. 使用匿名内部类的方式创建 Runnable 接口实现。
  Runnable r1 = new Runnable(){
    @Override
    public void run(){
        System.out.println("匿名内部类方式");
    }
};
  1. 使用 Lambda
  Runnable r2 = () -> System.out.println("Lambda方式一");
或者
Runnable r3 = () -> {System.out.println("Lambda方式二");};

2.2、语法格式

格式一:无参、无返回值,最简单。

  Runnable r2 = () -> System.out.println("Lambda格式一");

格式二:一个参数、无返回值。

  Consumer<String> con = (p) -> System.out.printf(p);

格式三:一个参数时,小括号可省略

  Consumer<String> con = p -> System.out.printf(p);

格式四:多个参数,有返回值

  Comparator<Integer> com = (x, y) -> {
    System.out.println("多个参数,有返回值");
    return Integer.compare(x,y);
};

格式五:当 Lambda 体中只有一句代码,return 和{}都可省略

  Comparator<Integer> com2 = (x, y) -> Integer.compare(x,y);

格式六:设置参数的数据类型

  Comparator<Integer> com = (Integer x,Integer y) -> {
    System.out.println("多个参数,有返回值");
    return Integer.compare(x,y);
};
或者
Comparator<Integer> com2 = (Integer x,Integer y) -> Integer.compare(x,y);

2.3、类型推断

我们会发现格式六就是在其它格式基础之上,再加上对应的数据类型,那为什么格式 1-5 不用加数据类型呢?

这就要说到 Lambda 表达式中编译器为我们多做的一个步骤:

编译器根据程序上下文,在后台推断出了参数类型,Lambda 表达式参数类型依赖于上下文环境,于是编译器帮咱们推断出来,是不是很赞!

你学会了么?
 

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>