欢迎访问宙启技术站
智能推送

Java中Lambda表达式的概念和用法

发布时间:2023-06-27 01:48:46

Lambda表达式是Java 8中引入的一个新特性,是一种快速定义匿名函数的方法。Lambda表达式可以以更简洁的代码表达功能,在编写函数式接口(Functional Interface)的时候更加方便,代码更加清晰易读。Lambda表达式的语法形式如下:

(parameter1, parameter2, …) -> {statement1; statement2; …}

其中参数列表(parameter1, parameter2, …)可以为空,但必须写成空括号“()”。箭头符号“->”将参数列表和函数体分开。函数体可以是表达式,也可以是代码块。表达式的值就是Lambda表达式的返回值,如果是代码块,需要使用return语句返回值。

简单来说,Lambda表达式可以理解为一种简化版的匿名内部类。下面举个例子来说明。

比如我们有一个接口,定义了一个方法doAction():

public interface Action {

    void doAction();

}

在Java 8之前,我们只能像这样创建一个实现类来实现该接口:

Action action = new Action() {

    @Override

    public void doAction() {

        System.out.println("Do something...");

    }

};

在Java 8中,我们可以使用Lambda表达式来直接定义一个匿名函数:

Action action = () -> System.out.println("Do something...");

通过Lambda表达式,我们省略了实现类的定义,直接定义了一个匿名函数,代码更简洁。

Lambda表达式适用于函数式接口,所谓函数式接口就是只包含一个抽象方法的接口。举个例子,下面的接口就是一个函数式接口:

public interface MyFunction {

    int compute(int num);

}

因为它只包含一个抽象方法compute(),所以我们可以使用Lambda表达式来直接定义一个实现:

MyFunction function1 = (int num) -> num + 1;

MyFunction function2 = num -> num * 2;

Lambda表达式中的参数类型可以省略,Java编译器会根据上下文自动推断参数类型。

Lambda表达式还可以引用外部变量。这些变量实际上是final变量,编译器在生成Lambda表达式的实现类代码时会把这些变量复制一份到实现类中,并且禁止修改它们的值。举个例子:

int x = 10;

MyFunction function = num -> num + x;

Lambda表达式还可以和方法引用一起使用,方法引用是Lambda表达式的一种简写形式,其语法形式如下:

类名::方法名

其中,类名可以是类或接口名,也可以是实例对象的类或接口名,方法名是要引用的方法名。下面是几种使用方法引用的例子:

// 静态方法

MyFunction function1 = Integer::valueOf;

// 实例方法

String s = "hello";

MyFunction function2 = s::length;

// 构造方法

Supplier<List<String>> supplier = ArrayList<String>::new;

以上是Lambda表达式的一些概念和用法,Lambda表达式是Java 8中的一项重要特性,学习和灵活应用Lambda表达式可以提高代码的可读性、可维护性和开发效率。