JAVA | Lambda表达式快速学习

什么是Lambda表达式

Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。

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

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

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

以下是lambda表达式的重要特征:

可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

Lambda 表达式的简单例子:

// 1. 不需要参数,返回值为 5  
() -> 5  
  
// 2. 接收一个参数(数字类型),返回其2倍的值  
x -> 2 * x  
  
// 3. 接受2个参数(数字),并返回他们的差值  
(x, y) -> x – y  
  
// 4. 接收2个int型整数,返回他们的和  
(int x, int y) -> x + y  
  
// 5. 接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)  
(String s) -> System.out.print(s)

Lambda表达式语法

Comparator<Integer> comparator = (x, y) -> Integer.compare(x, y);
Runnable runnable = () -> System.out.println("Lambda表达式");

Lambda 表达式在Java 语言中引入了一个新的语法元 素和操作符。这个操作符为 “->” , 该操作符被称为 Lambda 操作符或剪头操作符。它将 Lambda 分为 两个部分:
左侧:指定了 Lambda 表达式需要的所有参数
右侧:指定了 Lambda 体,即 Lambda 表达式要执行的功能。

lambda表达式语法可抽象表示为:

(Type1 param1, Type2 param2, ..., TypeN paramN) -> {
     statment1;
     statment2;
     ...
     return statmentN;
}

以Predicate判断是否为成年人为例:

Predicate<Person> predicate = (Person person) -> {
    
    
    Integer age = person.getAge();
    return age >= 18;
};

上面的lambda表达式语法抽象表示是比较官方的,和我们平时所写的lambda表达式比起来要繁琐一些。别着急,下面会一点一点地演示lambda表达式的简化过程。

  1. 参数类型省略
    绝大多数情况,编译器都可以从上下文环境中推断出lambda表达式的参数类型。这样,lambda表达式就变成了:
(param1, param2, ..., paramN) -> {
    statment1;
    statment2;
    ...
    return statmentN;
}

上面的例子也可简化为:

Predicate<Person> predicate = (person) -> {
    
    
    Integer age = person.getAge();
    return age >= 18;
};
  1. 当lambda表达式的参数个数只有一个,可以省略小括号。
    lambda表达式简写为:
param -> {
    statment1;
    statment2;
    ...
    return statmentN;
}

对应的例子简化为:

Predicate<Person> predicate = person -> {
    
    
    Integer age = person.getAge();
    return age >= 18;
};
  1. 当lambda表达式只包含一条语句时,可以省略大括号、return和语句结尾的分号。

    其他省就省了,为啥return关键字也可以被省略呢?原因是,编译器会认为:既然只有一个语句,那么这个语句执行的结果就应该是返回值,所以return也就不需要了。因此,lambda表达式简化为:

param -> statment;

所以例子又可简化成:

Predicate<Person> predicate = person -> person.getAge() >= 18

猜你喜欢

转载自blog.csdn.net/u012294515/article/details/100180426
今日推荐