Lambda表达式
一、函数式接口
在介绍lambda表达式之前,我们需要了解什么是函数式接口,因为函数式接口是lambda表达式应用最多的地方。
1、函数式接口的定义:
- 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。
- 对于函数式接口,我们可以通过lambda表达式来创建该接口的对象。
2、函数式接口例子
public interface Runnable{ public abstract void run(); }
上述代码中,我们以Runnable接口为例(是多线程相关接口),这个接口中只包含一个抽象方法,没有其他的方法,这就叫做函数式接口。
二、为什么要使用lambda表达式
- 避免匿名内部类定义过多(也可以说用来替换匿名内部类)
- 可以让你的代码看起来很简洁
- 去掉一堆没有意义的代码,只留下核心的部分
三、lambda表达式使用方法
1、lambda表达式语法:
- 第一个部分为一个括号内用逗号分割的形式参数,参数是函数式接口里面方法的参数(parameter 1,parameter 2,....)
- 第二部分为箭头符号:->
- 第三部分为方法体,即代码块
(parameter 1,parameter 2,....)-> expresion
2、lambda表达式实例
毫无疑问,实现Runnable接口是函数式接口的经典例子,下面我们用代码介绍lambda表达式的使用方法:
(1)首先我们放出Runnable的源代码
@FunctionalInterface public interface Runnable { public abstract void run(); }
可以看到,Runnable类中只含有一个run()方法,所以是典型的函数式接口。
(2)使用匿名内部类
public class Demo2{ public static void main(String[] args) { new Thread(new Runnable() { @Override public void run() { System.out.println("我使用的是匿名内部类"); } }).start(); } }
(3)使用lambda表达式
public class Demo2{ public static void main(String[] args) { new Thread(()->{ System.out.println("我是lambda表达式"); }).start(); } }
我们可以发现,使用lambda表达式后,十分简洁,用了极少的代码完成了一个类做的事情!
四、lambda表达式的简化
(1)、可选类型声明:可以不用声明参数类型,编译器可以统一识别参数值
(2)、可选参数圆括号:0个或1个参数无需圆括号,但多个参数需要定义圆括号
(3)、可选的花括号:如果方法体只包含一个语句,就可以不使用花括号
上述说明的lambda表达式简化,感兴趣的小伙伴可以自己尝试一下~
注:如果对匿名内部类不是很了解的同学可以查看我的另一篇博客java内部类 https://www.cnblogs.com/mikellee/p/13995504.html
好了,今天lambda的讲解就到这里,在这里我只讲解了最典型的应用场景,即用lambda替代匿名内部类。其实lambda表达式还有其他应用场景,比如使用lambda表达式对集合进行迭代、用lambda表达式实现map与reduce等等,感兴趣的同学可以自行查阅哦~
欢迎关注微信公众号,不定期分享学习笔记与资料,与Mike一起学java,谢谢~

浙公网安备 33010602011771号