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

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

内容简介:对于那些不熟悉函数式编程的人来说,基本的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语法》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

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

怪诞行为学2

怪诞行为学2

[美]丹·艾瑞里 / 赵德亮 / 中信出版社 / 2010-1-9 / 42.00元

《怪诞行为学2:非理性的积极力量》编辑推荐:尝试用“非理性”的决策方式,彻底颠覆工作和生活中的“逻辑”,你将获得意想不到的成就感与幸福感!畅销书《怪诞行为学》作者卷土重来,掀起新一轮“非理性”狂潮。 《写给中国人的经济学》作者王福重、著名行为经济学家董志勇倾情作序。 诺贝尔经济学奖得主阿克尔洛夫、《免费》作者安德森高度评价。 《纽约时报》《哈佛商业评论》《波士顿环球报》等全球顶级......一起来看看 《怪诞行为学2》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

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

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具