通过这些示例快速学习Java lambda语法

栏目: Java · 发布时间: 6年前

内容简介:对于那些不熟悉函数式编程的人来说,基本的Java lambda语法起初可能有点令人生畏。但是,一旦将lambda表达式分解为它们的组成部分,语法很快就会变得有意义并变得非常自然。Java中lambda表达式的目标是要应用这些概念,我们首先需要一个功能接口。功能接口是仅定义必须实现的单个方法的接口。以下是我们将用于此示例的功能接口:

对于那些不熟悉函数式编程的人来说,基本的Java lambda语法起初可能有点令人生畏。但是,一旦将lambda表达式分解为它们的组成部分,语法很快就会变得有意义并变得非常自然。

Java中lambda表达式的目标是 实现单个方法 。所有 Java 方法都有一个参数列表和一个正文,因此毫不奇怪这两个元素是Java lambda语法的重要组成部分。此外,Java lambda语法用箭头分隔这两个元素。因此,要学习Java lambda语法,您需要熟悉它的三个组成部分:

  1. 参数列表
  2. 箭头
  3. 方法体

要应用这些概念,我们首先需要一个功能接口。功能接口是仅定义必须实现的单个方法的接口。以下是我们将用于此示例的功能接口:

<b>interface</b> SingleArgument {
   <b>public</b> <b>void</b> foo(String s);
}

此接口的方法需要传入String参数,lambda为SingleArgument接口提供了一个实现,以及对接口的foo方法的几次调用:

SingleArgument sa1 =  n -> System.out.print(n);
sa1.foo(<font>"Let us all"</font><font>);
sa1.foo(</font><font>" learn lambda syntax"</font><font>);
</font>

以下是实现此逻辑的完整类:

<b>public</b> <b>class</b> LearnJavaLambdaSyntax {
    
   <b>public</b> <b>static</b> <b>void</b> main(String args[]) {    
      SingleArgument sa1 =  n -> System.out.print(n);
      sa1.foo(<font>"Let us all"</font><font>);
      sa1.foo(</font><font>" learn lambda syntax"</font><font>);
   }
}

<b>interface</b> SingleArgument {
   <b>public</b> <b>void</b> foo(String s);
}
</font>

简明扼要的Java lambda语法

上面演示的实现是高度缩写的。这有时会让新手学习Java lambda语法有点困难。有时候,为代码添加更多的仪式是有帮助的。可以使学习Java lambda语法更容易的一个增强是在方法签名周围放置圆括号并在左侧包含类型声明:

SingleArgument sa2 = (String n) - > System.out.print(n) ;

此外,您可以在右侧的内容周围放置花括号,并使用分号结束每个语句

SingleArgument sa3 = (String n) - > {System.out.print(n); } ;

多行lambda表达式语法

实际上,如果您的方法实现具有多个语句,则需要使用分号和大括号。例如,如果我们想要使用正则表达式,在打印出一段给定的文本之前去除所有空格,我们的Java lambda语法将如下所示:

(String n) -> {
    n = n.replaceAll(<font>"\\s"</font><font>,</font><font>""</font><font>);
    System.out.print(n);
}
</font>

多参数lambda函数

在此示例中,函数接口中的方法只有一个参数,但多个参数完全有效,只要lambda表达式中的参数数量与功能接口的方法中的数字匹配即可。由于Java是强类型语言,因此对象类型也必须是多态匹配。

以下面的功能接口为例:

<b>interface</b> MultipleArguments { 
   <b>public</b> <b>void</b> bar(String s,<b>int</b> i); 
}

用于实现此功能接口的高度礼仪式Java lambda语法如下:

MultipleArguments ma1 = (String p, <b>int</b> x) -> {
   System.out.printf(<font>"%s wants %s slices of pie.\n"</font><font>, p, x);
};
</font>

如您所见,这个lambda表达式利用了多个参数,而不仅仅是一个。

我把这个例子描述为高度仪式,因为我们可以大大降低其冗长度。我们可以删除左边的类型声明,我们可以删除右边的花括号和冒号,因为方法实现中只有一条指令。Java lambda语法的更简洁用法如下:

( p, x ) -> System.out.printf ( <font>"%s wants %s slices.\n"</font><font>, p, x )
</font>

正如您所看到的,Java lambda语法与传统 JDK 开发人员习惯的语法略有不同,但与此同时,当您将其分解时,很容易看出所有部分是如何组合在一起的。通过一些练习,开发人员很快就学会了喜欢Java lambda语法。

以在 GitHub找到 本教程中使用的源代码。


以上所述就是小编给大家介绍的《通过这些示例快速学习Java lambda语法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

编写可维护的JavaScript

编写可维护的JavaScript

扎卡斯 / 李晶、郭凯、张散集 / 人民邮电出版社 / 2013-4 / 55.00元

《编写可维护的JavaScript》向开发人员阐述了如何在团队开发中编写具备高可维护性的JavaScript代码,书中详细说明了作为团队一分子,应该怎么写JavaScript。《编写可维护的JavaScript》内容涵盖了编码风格、编程技巧、自动化、测试等几方面,既包括具体风格和原则的介绍,也包括示例和技巧说明,最后还介绍了如何通过自动化的工具和方法来实现一致的编程风格。 《编写可维护的Ja......一起来看看 《编写可维护的JavaScript》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

在线进制转换器
在线进制转换器

各进制数互转换器

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具