Lambda表达式与函数式接口

  • Post author:
  • Post category:其他


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 版权协议,转载请附上原文出处链接和本声明。