Java8新特性之Lambda表达式

1、Lambda 的基本介绍

Lambda Java8 的新特性之一,Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码。作为一种更紧凑的代码风格,使Java的语言表达能力得到了提升。 

在JDK8之前,Java是不支持函数式编程的,所谓的函数编程,即可理解是将一个函数(也称为“行为”)作为一个参数进行传递。通常我们提及得更多的是面向对象编程,面向对象编程是对数据的抽象(各种各样的POJO类),而函数式编程则是对行为的抽象(将行为作为一个参数进行传递)。在JavaScript中这是很常见的一个语法特性,但在Java中将一个函数作为参数传递这却行不通,好在JDK8的出现打破了Java的这一限制。 

 

2、Lambda 的语法

Lambda 表达式在Java 语言中引入了一个新的操作符。这个操作符为 “->” , 该操作符被称为 Lambda 操作符或剪头操作符。

Lambda 操作符 -> 将 Lambda 分为了两个部分:

  • 左侧: 指定了 Lambda 表达式需要的所有参数
  • 右侧: 指定了 Lambda 体,即 Lambda 表达式要执行的功能。

 

各种情况语法格式说明:

  • 无入参,无返回值:
Runnable r1 = () -> System.out.println("Hello Lambda!");
  • 有一个入参,无返回值:

 

Consumer<String> con = (x) -> System.out.println(x);
Consumer<String> con = x -> System.out.println(x);  //只有一个参数,此时参数的小括号可以省略掉
  • 有两个入参,并且有返回值

 

Comparator<Integer> com = (x, y) -> {
    System.out.println("函数式接口");
    return Integer.compare(x, y);
};

 

当 Lambda 体只有一条语句时,return 与大括号都可以省略,Lambda 会自动将操作符右侧的值进行返回

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

Lambda 表达式的参数列表的数据类型也可以省略不写,因为JVM编译器会通过上下文自动推断出数据类型,即“类型推断”

Comparator<Integer> com = ( Integer x, Integer y) -> {  //Integer 类型可以省略
   System.out.println("函数式接口");
   return Integer.compare(x, y);
};

类型推断:Lambda 表达式中的参数类型都是由编译器推断 得出的。 Lambda 表达式中无需指定类型,程序依然可以编译,这是因为 javac 根据程序的上下文,在后台推断出了参数的类型。 Lambda 表达式的类型依赖于上下文环境,是由编译器推断出来的。这就是所谓的 “类型推断”

 

posted @ 2021-12-05 19:45  wenxuehai  阅读(224)  评论(0编辑  收藏  举报
//右下角添加目录