前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一个简单案例,5 分钟看懂 Java Lamdba 表达式

一个简单案例,5 分钟看懂 Java Lamdba 表达式

作者头像
芋道源码
发布2018-10-26 11:17:46
6150
发布2018-10-26 11:17:46
举报
文章被收录于专栏:芋道源码1024芋道源码1024

JDK8引入了一个新玩意,叫做lamdba(那么大)的表达式,说得神乎其神,说真的,这玩意吧,并不难,但是要讲清楚吧,也不是太容易的事情。

从匿名内部类开始说起

老实交代,直接来讲lamdba表达式还真是个枯燥的玩意,那从哪下手呢,我想你一定使用过匿名内部类吧,这玩意在javaswing里面用的超级多。

比如监听一个按钮的单击事件:

代码语言:javascript
复制
       JButton jButton = new JButton();
       jButton.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {
               System.out.println("按钮被点击了");
           }
       });

这段代码应该不陌生吧,addActionListener的这方法需要一个ActionListener接口类型的参数,我这里传参就是通过匿名内部类的方式。

你可能会说,swing是什么古董,java开发早不玩这玩意了,嗯,我不好反驳(毕竟连eclipse都是swing\awt开发的)。

好吧,我再举另外一个栗子,线程怎么样,线程如果还不懂,我就要……

创建线程有很多种方式,那么我从里面选一直比较简单的

比如:

代码语言:javascript
复制
       new Thread(new Runnable() {
           public void run() {
               System.out.println("这是个线程,我是匿名内部类");
           }
       }).start();

好吧,你仔细看下上面两个实例代码,并且……

并且数一数上面代码的行数,我姑且算它5行不过分吧。

话锋一转,来看下Lamdba的定义

定义:Lambda是一个匿名函数,即没有函数名的函数(简化了匿名委托的使用,让你让代码更加简洁)

请不要去百度这句话出自哪,我有点羞于承认这是我自己总结的,嗯,有一点成就感,同时也有点害羞。

你来看下这句话的意思,Lambda是一个匿名函数,即没有函数名的函数,这句话是不是非常眼熟,这不就是匿名内部类吗?

嗯,其实括号里面的才是重点【简化了匿名委托的使用,让你让代码更加简洁】

匿名委托又是什么鬼?

其实我卖了个关子,匿名委托就是匿名内部类

用直白的话来讲,lamdba表达式就是简化了匿名内部类的编写,这样解释应该好懂吧(不懂你把我杀了吧)

万一不懂,嗯,万一还是不懂请留言吧。

Lamdba(那么大)的表达式到底是什么简化代码?

谜题好像要解开了,知道了匿名委托是什么,也知道了Lamdba表达式的定义,那么回到刚才写的那两个匿名内部类。

第一个

代码语言:javascript
复制
       JButton jButton = new JButton();
       jButton.addActionListener(new ActionListener() {
           public void actionPerformed(ActionEvent e) {
               System.out.println("按钮被点击了");
           }
       });

使用lamdba把上面的简化下:

代码语言:javascript
复制
       JButton jButton = new JButton();
       jButton.addActionListener(e -> System.out.println("按钮被点击了"));

再来看第二个,线程的那个内部类

代码语言:javascript
复制
       new Thread(new Runnable() {
           public void run() {
               System.out.println("这是个线程,我是匿名内部类");
           }
       }).start();

再使用lamdba简化一下

代码语言:javascript
复制
new Thread(()-> System.out.println("这是个线程,我是匿名内部类")).start();

好吧,还是那个要求,请你数数,看下使用lamdba表达式到底简化了多少行代码。

嗯,我想现在你一定对lamdba有了一定的理解,知道他确实是简化了代码的编写。

仔细看下这lamdba,感觉还是不太好理解,里面既然冒出了个“->”的符号,现在似乎应该来讲讲lamdba的语法了。。

但,请容我休息一下,具体的lamdba语法留下一次分享。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-10-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 芋道源码 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档