在 JDK 8 支持 Lambda 表达式之前,我只在 C# 和 C++ 等语言中使用过它们的示例。

一旦这个特性被添加到 Java 中,我就开始更加深入地研究它们了。

Lambda 表达式利用多核环境下的并行处理能力,如 Stream API 中对数据的管道操作。

它们是匿名方法(没有名称的方法),用于实现由函数式接口定义的方法。在开始使用 Lambda 表达式之前,了解函数式接口是很重要的。

快速介绍

Lambda 表达式增加了语法元素,增强了 Java 的表达能力。本文将重点介绍你需要了解的基本概念,以便今天就开始将 Lambda 表达式添加到你的代码中。

函数式接口

函数式接口是只包含一个抽象方法的接口。

run()
computeNameMyName

函数式接口

箭头操作符

->
(n) -> n*n

左侧指定表达式所需的参数,如果不需要参数,则也可以为空。

右侧是 Lambda 主体,指定 Lambda 表达式的操作。可以将此操作符视为“成为”。例如,“n 成为 n*n”或“n 成为 n 的平方”。

有了函数式接口和箭头操作符的概念,你可以组合一个简单的 Lambda 表达式:

数值测试

问候语 Lambda

morningGreetingeveningGreetingMyGreeting

在编写 Lambda 表达式时,还可以像这样显式指定表达式中参数的类型:

带类型的 Lambda

块 Lambda 表达式

块 Lambda

块 Lambda

泛型函数式接口

Lambda 表达式不能是通用的。但与 Lambda 表达式关联的函数式接口可以是通用的。可以编写一个通用接口并处理不同的返回类型,如下所示:

通用函数式接口

Lambda 表达式作为参数

Lambda 的一个常见用途是将它们作为参数传递。

它们可以用于任何提供目标类型的代码片段。我发现这很令人兴奋,因为它允许我将可执行代码作为参数传递给方法。

要将 Lambda 表达式作为参数传递,请确保函数式接口类型与所需参数兼容。

Lambda 表达式作为参数

这些概念将为你提供一个良好的基础,以开始使用 Lambda 表达式。查看你的代码并查看你可以增强 Java 表达能力的地方。