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

如何使用Lambda表达式定义函数

发布时间:2023-06-09 23:38:01

Lambda表达式是Java 8中最令人兴奋的功能之一。它提供了一种简便的方法来定义匿名函数,能够以一种相当简明的方式编写功能代码。

Lambda表达式与匿名内部类很相似,但是它们的语法更加简单易懂,并且可以用于任何只有单个抽象方法的接口。这些接口通常被称为函数式接口。

本文将介绍如何使用Lambda表达式来定义函数。我们将从最基本的例子开始,逐步深入,直到你能够感觉自己成为了一个Lambda大师。

语法

Lambda表达式可以定义在适用于“函数式接口”的任何地方,例如在方法参数中。这些表达式的语法如下所示:

(parameter1, parameter2, ..., parameterN) -> { statement1; statement2; ... statementN; }

其中,参数是用逗号分隔的列表,列表周围括在圆括号中。箭头()->是将参数和Lambda主体之间连接的元素。语句包含在花括号内,并且可以包含一系列Java语句。如果Lambda表达式的主体只有一个表达式,那么大括号可以省略,如下所示:

(parameter1, parameter2, ..., parameterN) -> expression

定义函数的基本语法如上所述,下面我们来看看如何使用Lambda表达式定义函数:

1. 参数列表为空,使用Lambda表达式的情况如下所示:

() -> { System.out.println("Hello World"); }

这将在控制台上打印“Hello World”。

2. 参数列表有一个参数,使用Lambda表达式的情况如下所示:

(str) -> { System.out.println(str); }

这将在控制台上打印传递给Lambda表达式的字符串。

3. 参数列表有多个参数,使用Lambda表达式的情况如下所示:

(x, y) -> { return x + y; }

这将返回给Lambda表达式传递的两个整数的总和。

4. 不使用大括号,使用Lambda表达式的情况如下所示:

(x, y) -> x + y;

在这种情况下,Lambda表达式将返回表达式x + y的结果。

函数式接口

上面的示例中,我们没有提到Java 8中最重要的概念——函数式接口。函数式接口是只有一个抽象方法(除了Object方法)的接口。它们是Lambda表达式的基础。在Java 8中很容易定义函数式接口。只需给接口添加注释@FunctionalInterface即可。下面是一个函数式接口的示例:

@FunctionalInterface

interface MyInterface {

  void myMethod();

}

定义函数的最基本的方法是在Lambda表达式中使用函数式接口。我们将使用这些示例来展示:

MyInterface myInterface = () -> System.out.println("Hello World");

myInterface.myMethod();

这将在控制台上打印"Hello world"。

实战

下面是一个通过Lambda表达式来定义函数的实战示例:

import java.util.Arrays;

import java.util.List;

public class LambdaDemo {

    public static void main(String[] args) {

        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9);

        System.out.println("输出所有数字:");

        // 输出所有数字

        NumbersFunction(numbers, (n) -> true);

        System.out.println("

输出所有偶数:");

        // 输出所有偶数

        NumbersFunction(numbers, (n) -> n % 2 == 0);

        System.out.println("

输出大于3的数字:");

        // 输出大于3的数字

        NumbersFunction(numbers, (n) -> n > 3);

    }

    public static void NumbersFunction(List<Integer> numbers, NumberPredicate predicate) {

        for (Integer number : numbers) {

            if (predicate.test(number)) {

                System.out.println(number + " ");

            }

        }

    }

}

@FunctionalInterface

interface NumberPredicate {

    boolean test(Integer n);

}

运行上面的代码将输出以下结果:

输出所有数字:

输出所有偶数:

输出大于3的数字:

9

这个示例将数组数字传递到函数NumbersFunction,并使用Lambda表达式定义一个NumberPredicate接口的实现来过滤并输出结果。