首发日期:2018-07-27
lambda表达式的目标类型必须是函数式接口。lambda通常用来实现函数式接口。
什么是函数式接口?
1.是一个接口
2.只有一个抽象函数
3.可以有默认函数(如toString等默认函数,大部分是Object中的同名函数)【这里给一个为什么接口会有类似继承自Object的函数的原因:】
相信看过上面的内容,你已经了解函数式接口了。下面介绍如果利用lambda表达式实现函数式接口。
普通的实现方法有很多,可以创建一个实名类来实现接口,也可以利用匿名类来实现:
1.创建一个实名类来实现接口
2.利用匿名类来实现
下面用lambda来实现,你会发现lambda确实能节省很多行代码。
---lambda实现->
上面已经演示过:有参数的,没参数的,表达式的,代码块的。下面介绍另一个留心点。
lambda表达式可以说是“任意类型”的,转换成什么取决于“需要什么”。
如上面的,左边是一个接口,那么右边需要一个接口的实现类的对象,于是lambda会去实现这个接口的抽象函数,并创建一个对象返回。
除此之外,还可以放在函数中作为形参,比如:
这个类的函数需要一个接口作为形参。当我们调用函数时,可以传入一个lambda表达式:
Java有不少自带的函数式接口,下面只以一个为例。
Comparator是Java中用来排序的一个接口,里面有一个compare函数。
很多能传入一个排序对象的函数,通常都是传入一个Comparator的实现类。
比如Arrays中的排序函数就可以传入一个Comparator的实现类。
在不用lambda时,可以有:
使用lambda表达式之后:
如你所见,减少了很多代码。所以如果需要传入的对象是一个函数式接口时,不妨考虑使用lambd表达式,这会节省很多代码。
如对本文有疑问, 点击进行留言回复!!
SpringBoot引用阿里easyexcel,Excel导出返回浏览器下载
HashMap、Hashtable、ConcurrentHashMap三者间的异同
解决RecycleView 中Item包含Edittext时,滑动view复用导致数据错乱的问题
多线程、同步工作原理、死锁案例、Lock接口、线程的生命周期的讲解及实现
网友评论