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

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

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

查看所有标签

猜你喜欢:

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

Learning PHP 5

Learning PHP 5

David Sklar / O'Reilly / July, 2004 / $29.95

Learning PHP 5 is the ideal tutorial for graphic designers, bloggers, and other web crafters who want a thorough but non-intimidating way to understand the code that makes web sites dynamic. The book ......一起来看看 《Learning PHP 5》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

SHA 加密
SHA 加密

SHA 加密工具

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

在线XML、JSON转换工具