<p class="indent">对于那些不熟悉函数式编程的人来说,基本的Java lambda语法起初可能有点令人生畏。但是,一旦将lambda表达式分解为它们的组成部分,语法很快就会变得有意义并变得非常自然。
<p class="indent">Java中lambda表达式的目标是实现单个方法。所有Java方法都有一个参数列表和一个正文,因此毫不奇怪这两个元素是Java lambda语法的重要组成部分。此外,Java lambda语法用箭头分隔这两个元素。因此,要学习Java lambda语法,您需要熟悉它的三个组成部分:
- 参数列表
- 箭头
- 方法体
功能接口。功能接口是仅定义必须实现的单个方法的接口。以下是我们将用于此示例的功能接口:
}
方法需要传入String参数,lambda为SingleArgument接口提供了一个实现,以及对接口的foo方法的几次调用:
SingleArgument sa1 = n -> sa1.foo("Let us all" sa1.foo(" learn lambda Syntax");
Syntax {
SingleArgument sa1 = n -> sa1.foo("Let us all" sa1.foo(" learn lambda Syntax"
}
代码添加更多的仪式是有帮助的。可以使学习Java lambda语法更容易的一个增强是在方法签名周围放置圆括号并在左侧包含类型声明:
System.out.print(n) ;
内容周围放置花括号,并使用分号结束每个语句
{System.out.print(n); } ;
多行lambda表达式语法
方法实现具有多个语句,则需要使用分号和大括号。例如,如果我们想要使用正则表达式,在打印出一段给定的文本之前去除所有空格,我们的Java lambda语法将如下所示:
(String n) -> n = n.replaceAll("\\s","" }
多参数lambda函数
函数接口中的方法只有一个参数,但多个参数完全有效,只要lambda表达式中的参数数量与功能接口的方法中的数字匹配即可。由于Java是强类型语言,因此对象类型也必须是多态匹配。
功能接口为例:
bar(String s, }
功能接口的高度礼仪式Java lambda语法如下:
MultipleArguments ma1 = (String p, x) -> System.out.printf("%s wants %s slices of pie.\n" };
删除左边的类型声明,我们可以删除右边的花括号和冒号,因为方法实现中只有一条指令。Java lambda语法的更简洁用法如下:
( p,x ) -> System.out.printf ( "%s wants %s slices.\n",x )