Lambda表达式与函数式接口

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值