Lambda表达式
(1) 为什么用lambda表达式
: 受java面向对象影响,我们做什么都需要一个对象,但是当我们仅仅需要某个接口中的某个方法时,也要先通过一个类来实现这个接口,再实例化一个对象来调用这个方法。为了简化,我们通过匿名内部类来实现接口,然后还必须重写方法,这些都是重复在做的。而我们仅仅想要
传入参数
,按照
自定义方法体
执行而已,所以有了Lambda表达式,
仅仅关注入参与方法内容,其他一律不管
。
(2)格式: () -> {}
- 前面小括号()放的是入参,可以没有,可以有多个,逗号隔开;只有一个参数时,小括号可以省略;参数类型可以省略
- 后面大括号{}是要执行的方法体,当只有一行代码时,大括号可以省略
(3)例如:
//1.常规编程,匿名内部类的方式,重写run方法
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("多线程任务执行!");
}).start();
//2.Lambda表达式
new Thread( () -> {System.out.println("多线程任务执行!");} ).start
(4)疑问:
-
为什么上面的代码可以简化到这种程度,系统怎么知道调用的是哪个方法?
-
解答:因为Lambda表达式必须配合函数式接口使用,什么叫做函数式接口,看下面解析↓
2.函数式接口
规范
:是一个接口,
有且仅有一个抽象方法
//1.按照规范书写
public interface MyFunctionalInterface {
void myMethod();
}
当然,与之匹配的jdk1.8也也提供了一个注解@FunctionalInterface
该注解定义在接口上,编译器将会强制检查该接口是否确实有且仅有一个抽象方法,否则将会报错。也可以不使用该注解,直接按照规范来写就行了
解决上面的问题
:因为只有一个方法,所以不用担心lambda表达式识别那个方法的问题
3.常见的函数式接口
- Runnable
- Comparator
- Supplier
- Consumer
- Function
- Predicate
版权声明:本文为weixin_43289848原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。