一个简单案例看懂java Lamdba表达式

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 一个简单案例看懂java Lamdba表达式

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

 

从匿名内部类开始说起

** **

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

 

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


JButton jButton = new JButton();
        
jButton.addActionListener(new ActionListener() {

     public void actionPerformed(ActionEvent e) {
         
       System.out.println("按钮被点击了");
    
    }
        
});

 

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

 

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

 

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

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

比如:


new Thread(new Runnable() {
            
public void run() {
            
    System.out.println("这是个线程,我是匿名内部类");
        
    }
        
}).start();

 

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

 

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

 

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

** **

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

 

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

 

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

 

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

 

匿名委托又是什么鬼?

 

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

 

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

 

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

 

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

** **

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

 

第一个


JButton jButton = new JButton();
        
jButton.addActionListener(new ActionListener() {
         
   public void actionPerformed(ActionEvent e) {
              
  System.out.println("按钮被点击了");
        
    }
        
});

 

使用lamdba把上面的简化下:


JButton jButton = new JButton();
        
jButton.addActionListener(e - System.out.println("按钮被点击了"));

 

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


new Thread(new Runnable() {
          
  public void run() {
               
 System.out.println("这是个线程,我是匿名内部类");
          
  }
        
}).start();

 

再使用lamdba简化一下


new Thread(()- System.out.println("这是个线程,我是匿名内部类")).start();

 

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

 

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

 

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

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 一个简单案例看懂java Lamdba表达式


 上一篇
深入理解 Java 虚拟机【2】HotSpot 虚拟机对象探秘 深入理解 Java 虚拟机【2】HotSpot 虚拟机对象探秘
作者:杨立滨 链接:https://github.com/yanglbme/jvm 知音专栏 程序员的出路 写程序时该追求什么,什么是次要的? 如何准备Java初级和高级的技术面试 对象的内存布局在 HotSpot 虚拟机中,对象的
下一篇 
简洁又快速地处理集合——Java8 Stream(上) 简洁又快速地处理集合——Java8 Stream(上)
作者:Howie_Y,系原创投稿 主页:www.jianshu.com/u/79638e5f0743 知音专栏 程序员的出路 写程序时该追求什么,什么是次要的? 如何准备Java初级和高级的技术面试 Java 8 发布至今也已经好几