什么是lambda表达式_什么是lambda表达式?“ lambda”一词从何处洗脱?

什么是lambda表达式

由于各种语言的限制,lambda表达式直到最近才从未成为Java语言。 长期以来,该概念已被翻译成其他语言,例如GroovyRuby 。 随着Java 8的改变,这一切都改变了。随着组织逐渐迁移到Java 8和Java 11平台,越来越多的开发人员获得了在代码中使用lambda表达式(也称为lambda函数)的机会。 这既引起了极大的兴奋,也引起了混乱。 许多开发人员都有疑问。 那么,为什么将此新语言功能称为lambda函数呢?

为什么将它们称为“ lambda函数”?

术语lamdba函数实际上起源于微积分 。 在数学中,lambda函数是其中将一组分配的变量映射到计算的函数。 这是一些代数lambda函数。 参加过高中数学的任何人都应该认识他们。

(x) = x2
(x, y) = x + y
(x, y, z) = x 3 - y 2 + z

对于第一个方程,如果x为3,则函数求值为9.如果第二函数的x和y均为2,则结果为4.如果第三函数的x,y和z为1、2和3. ,计算结果为零。

如您所见,一组变量被映射到一个函数上,该函数生成一个结果。 计算机科学的必然结果是采用一组变量并将这些变量映射到单个函数。 让我们特别强调“ 单身 ”一词。 当只有一个函数要实现时,Lambdas起作用。 当混合使用多种方法时,lambda的概念在计算机科学中完全崩溃。

Lambda函数的匿名性质

值得一提的第二点是,lambda函数是匿名的且未命名。 在处理数学函数时,这不是很明显,但是如果您看一下前面列出的第一个函数,下面的内容足以解释正在发生的一切:

(x) = x2 

无需为函数命名,例如:

basicParabola (x) = x2 

从这个意义上说,lambda函数是未命名和匿名的。

Java中的Lambda函数

关于lambda函数的词源的讨论很有趣,但是真正的问题是这些数学概念如何转换为Java。

Java中的lambda函数

Java程序中lambda函数的示例。

在Java中,在很多地方,一段代码需要单个方法实现。 Java API中有许多接口,只需要实现一种方法即可。 也称为功能接口 ,常用的单方法接口包括Flushable,Runnable,Callable,Comparator,ActionLIstener,FileFilter,XAConnection和RowSetWriter 。 在Java中使用这些接口中的任何一个都可能有些麻烦。 例如, 比较器是一个功能界面,可让您对对象进行排名以方便排序。 在Java 8之前用于对数组进行排序的代码如下所示:

Integer[] numbers = {5, 12, 11, 7};
Arrays.sort (numbers, new Comparator<Integer>() {
   public int compare(Integer a, Integer b) {
      return b - a;
   }             
});

System. out .println(Arrays. toString (numbers));

使用lambda函数时,冗长的内容消失了,结果是这样的:

Integer[] numbers = {5, 12, 11, 7};
Arrays.sort (numbers, (a, b) -> b-a);
System. out .println(Arrays. toString (numbers));
lambda表达式代码膨胀

具有和不具有lambda函数的Comparator接口的实现。

当您第一次学习使用lambda表达式时,有时会更容易将lambda表达式分配给在单独步骤中实现的接口。 如果使用附加行进行编码,则先前的示例可能会更清晰一些:

Integer[] numbers = {5, 12, 11, 7};Comparator theComparator =  (a, b) -> b-a ;
Arrays. sort (numbers, theComparator ); 
System. out .println(Arrays. toString (numbers));

如您所见,lambda表达式使代码更加简洁。 Lambda表达式使代码更易于编写和维护,并且缺点也很少。 唯一的缺点是语法对于新用户而言似乎有些神秘。 不过,经过一段时间的lambdas处理后,它变得很自然。 开发人员会想知道如果没有它们,他们如何设法编写代码。

Java示例中这些Lambda表达式的代码可在GitHub找到

翻译自: https://www.theserverside.com/blog/Coffee-Talk-Java-News-Stories-and-Opinions/What-is-a-lambda-function-and-from-where-did-the-term-lambda-elute

什么是lambda表达式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值