如何使用Lambda表达式定义函数
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);
}
运行上面的代码将输出以下结果:
输出所有数字:
1
2
3
4
5
6
7
8
9
输出所有偶数:
2
4
6
8
输出大于3的数字:
4
5
6
7
8
9
这个示例将数组数字传递到函数NumbersFunction,并使用Lambda表达式定义一个NumberPredicate接口的实现来过滤并输出结果。
