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

lambda 使用示例

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

Java中的lambda表达式的目标是实现单个方法 。 所有Java方法都有一个参数列表和一个主体,因此这两个元素是Java lambda语法的重要组成部分就不足为奇了。 此外,Java lambda语法用箭头将这两个元素分开。 因此,要学习Java lambda语法,您需要熟悉其三个组成部分:

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

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

interfaceSingleArgument {
   public void foo(String s);
}

此方法的实现需要传入一个String以及一个对String执行一些逻辑的主体。 稍后,我们将其分解为组成元素,但是现在,这是一个非常基本的示例,其中lambda为SingleArgument接口提供了一个实现,并对该接口的foo方法进行了两次调用:

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

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

package com.mcnz.lambda;

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

interface SingleArgument {
   public void foo(String s);
}

简洁明了的Java Lambda语法

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

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

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

SingleArgument sa3 =(String n) -> { System.out.print(n); }  ;
学习Java Lambda语法

比较这些不同的方法来学习Java lambda语法。

多行lambda表达式语法

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

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

多参数Lambda函数

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

以以下功能界面为例:

interface MultipleArguments {
   public void bar(String s, int i);
}

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

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

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

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

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

如您所见,Java lambda语法与传统的JDK开发人员所使用的语法有很大不同,但是同时,当您分解它时,很容易看到所有部分如何组合在一起 。 通过一些实践,开发人员可以快速学习到喜欢Java lambda语法。

这是此示例中使用的代码的完整列表:

package com.mcnz.lambda;

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

    SingleArgument sa2 =  (String n) -> System.out.print(n);
    sa2.foo("Java lambda syntax ");
    sa2.foo("isn't hard.\n");
		
    SingleArgument sa3 =  (String n) -> { System.out.print(n); };
    sa3.foo("You just need a few ");
    sa3.foo("good Java lambda examples.\n");
		
    SingleArgument sa4 =  (String n) -> {
      n = n.replaceAll("\\s","");
      System.out.print(n);
    };
    sa4.foo("This Java lambda example ");
    sa4.foo("will not print with whitespace.\n");
		
    MultipleArguments ma1 = (String p, int x) -> {
      System.out.printf("%s1 wants %s2 slices of pie.\n", p, x);
    };
    ma1.bar("Cameron ", 3);
    ma1.bar("Callie", 4);
		
    MultipleArguments ma2 = 
      ( p, x ) -> System.out.printf ( "%s1 wants %s2 slices.\n", p, x );
    ma2.bar("Brandyn", 1);
    ma2.bar("Carter", 2);
	
  }

}

interface SingleArgument {
  public void foo(String s);
}

interface MultipleArguments {
 public void bar(String s, int i);
}

运行此Java lambda语法示例时,完整的打印输出为:

Let us all learn lambda syntax.
Java lambda syntax isn't hard.
You just need a few good Java lambda examples.
ThisJavalambdaexamplewillnotprintwithwhitespace.Cameron 1 wants 32 slices of pie.
Callie1 wants 42 slices of pie.
Brandyn1 wants 12 slices.
Carter1 wants 22 slices.

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

翻译自: https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/Learn-Java-lambda-syntax-quickly-with-these-examples

lambda 使用示例

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值