从0到0.1学习 lambda表达式(Java版)
创始人
2024-02-16 18:55:22
0

编码几年时间,有一个东西似乎一直也逃不过去,那就是lambda表达式。
无论是c#,Python还是Java,lambda的思想都是共通的。但以下的语法和实例为java。

现在就来说说这个看似很难的lambda表达式

什么是lambda表达式?

lambda表达是实质上就是一个匿名函数
那什么是匿名函数呢?
匿名函数就是没有名字的函数,可以直接嵌入在方法内。里面只包括 函数参数(parameter)+表达式(expression) 或者 函数参数(parameter)+陈述(statements)
PS: 表达式产生值 eg. a+b;2。这两个都属于表达式。 陈述重在操作 比如 if a==b then c=a; c=a+b将xx赋值给xx,或者循环/判断
实际上,陈述也包含了表达式,
因此,我们可以将lambda表达式当成可以输出一个值的函数来使用(把lambda表达式赋给某个值)

语法如下

// no parameter
() -> expression
// one or multi parameters
parameter -> expression
(param1,param2) -> expression
// muiti statements
(param1,param2) -> { statements }

举个例子(JAVA)

(int x, int y) -> x * y;

lambda表达式解决了什么问题?

偷了一张知乎里大哥的图,此为java语法(java 8及以上)
在这里插入图片描述
可以看到,图中简略了一整个函数的过程。由之前的嵌套代码变成了一行简洁的代码。

进阶 - 与接口一起使用

public class Test
{// 接口FuncInter1中定义了有且仅有一个抽象函数interface FuncInter1{int operation(int a, int b);}public static void main(String args[]){// 使用lambda表达式的方式实现了FuncInter1接口中的唯一函数FuncInter1 add = (int x, int y) -> x + y;FuncInter1 multiply = (int x, int y) -> x * y;// 使用正常的方式调用接口中的参数即可System.out.println("Addition is " + add.operation(2, 3));System.out.println("Multiplication is " + multiply.operation(2, 3));}
}

当前方式是用lambda表达式实现接口后,用对应接口的对应函数调用lambda表达式从而得到结果,那有没有更简单的方式呢?真的有!

public class Test
{// 依然是原来的接口interface FuncInter1{int operation(int a, int b);}// 将接口中的方法封装起来,这样只需要实现方法及输入参数就可以调用了private int operate(int a, int b, FuncInter1 fobj){return fobj.operation(a, b);}public static void main(String args[]){FuncInter1 add = (int x, int y) -> x + y;FuncInter1 multiply = (int x, int y) -> x * y;// 直接掉用封好的函数System.out.println("Addition is " + operate(6, 3, add));System.out.println("Multiplication is " + operate(6, 3, multiply));}
}

参考

  1. 介绍什么statement与expression:https://farside.ph.utexas.edu/teaching/329/lectures/node11.html
  2. Java8-lambda表达式的简单介绍:https://www.geeksforgeeks.org/lambda-expressions-java-8/
  3. 图片来源:https://www.zhihu.com/question/20125256/answer/324121308

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
苏州离哪个飞机场近(苏州离哪个... 本篇文章极速百科小编给大家谈谈苏州离哪个飞机场近,以及苏州离哪个飞机场近点对应的知识点,希望对各位有...
客厅放八骏马摆件可以吗(家里摆... 今天给各位分享客厅放八骏马摆件可以吗的知识,其中也会对家里摆八骏马摆件好吗进行解释,如果能碰巧解决你...