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

Java函数-函数式接口与Lambda表达式入门

发布时间:2023-07-02 03:04:36

Java 8引入了函数式编程的概念,其中有两个重要的概念是函数式接口和Lambda表达式。函数式接口是只有一个抽象方法的接口,Lambda表达式是一种简洁的函数申明形式。

函数式接口可以由Java中的任意接口来担任,只要该接口只有一个抽象方法即可。例如,我们可以使用Runnable接口来定义一个函数式接口:

@FunctionalInterface
interface MyRunnable {
    void run();
}

注解@FunctionalInterface用于显式标识该接口是一个函数式接口,虽然不是必需的,但是有助于我们在编译期间发现错误。

Lambda表达式是一种匿名函数的简洁写法。它由参数列表、箭头运算符和函数体组成。例如,下面是一个使用Lambda表达式实现的函数式接口的例子:

MyRunnable myRunnable = () -> System.out.println("Hello, world!");

Lambda表达式的箭头左边是参数列表,如果参数列表为空,可以写成一对空括号。箭头右边是函数体,可以是一条语句也可以是多条语句。

Lambda表达式可以用来替代匿名内部类的实例化。例如,通过实现Comparator接口来排序字符串列表:

List<String> list = Arrays.asList("apple", "banana", "orange");
Collections.sort(list, (s1, s2) -> s1.compareTo(s2));

上面的例子中,Lambda表达式取代了匿名内部类的实例化,使代码变得更加简洁。

Lambda表达式可以捕获外部变量,即可以访问外部作用域中的局部变量。例如,下面的例子中,Lambda表达式可以访问count变量:

int count = 0;
Runnable runnable = () -> System.out.println(count);

Lambda表达式可以不仅仅是单行代码,还可以是多行代码。在多行代码的情况下,需要使用花括号将代码块包围起来,并使用return语句返回结果。例如,下面的例子中,Lambda表达式返回两个数的和:

MySum sum = (a, b) -> {
    int result = a + b;
    return result;
};

Lambda表达式可以与函数接口一同使用,以便提供一个接口的具体实现。

函数式接口和Lambda表达式是Java 8中引入的重要概念,它们使得函数式编程在Java中更加易于使用。函数式接口使得定义函数接口变得简单,Lambda表达式使得实现函数接口变得简洁。这些新特性使得Java中的函数式编程更加强大和灵活。