引言
在这篇文章,我们将学习 Lambda 表达式以及 Lambda 表达式与函数式接口的使用,泛型函数式接口,并演示流式传输 API。
Lambda 表达式是在 Java 8 中首次引入的,它的主要目的是提高编程语言的表达能力,简化冗余代码。
不过,在进入深入学习匿名函数之前,我们首先需要了解函数式接口。
什么是函数式接口?
如果一个 Java 接口包含一个且只有一个抽象方法,那么它被称为函数式接口。这样只有有一个方法规定了接口的预期结果类型。
示例 1:在 Java 中定义一个函数式接口
@FunctionalInterface public interface DemoInterface { // 单一抽象方法 Integer getValue(); } 复制代码
在上面的例子中,接口 DemoInterface 只有一个抽象方法 getValue()。因此,它是一个功能接口。 在这里,我们使用了注解 @FunctionalInterface
,此注解的作用是强制 Java 编译器指示此接口为函数式接口。
在 Java 7 中,函数式接口被认为是 Single Abstract Method 或 SAM 类型,在 Java 7中,SAM通常用匿名类来实现。
示例 2:在 Java 中使用匿名类实现 SAM
public class FunctionInterfaceTest { public static void main(String[] args) { // 匿名类 new Thread(new Runnable() { @Override public void run() { System.out.println("我刚刚实现了 Runnable 的函数接口。"); } }).start(); } } 复制代码
输出:
我刚刚实现了 Runnable 的函数接口。 复制代码
在这里,我们可以将匿名类传递给方法。这有助于在 Java 7 中使用更少的代码编写程序。但是,语法仍然很困难,并且需要大量冗余的代码行。
Java 8 进一步扩展了 SAM 的功能。由于我们知道函数式接口只有一个方法,因此在将其作为参数传递时不需要定义该方法的名称。 Lambda 表达式恰好可以做到这一点。
Lambda 表达式简介
La