day12【Lambda,函数式接口】Lamd

今日内容

  • 函数式接口
  • 函数式编程
  • 常见函数式接口

Lambda表达式

JDK1.8的新特性.

  • 语法糖:使用更加方便,但原理不变.foreach和迭代器.
  • Lambda和匿名内部类不同,匿名内部类会产生类型(可以产生.class文件),而Lambda不会产生类型.
    所以Lambda不是匿名内部类的语法糖!!!

Lambda格式:

  • () -> {}
  • 一些参数 一个指向 一段代码

使用Lambda的前提

Lambda只能操作函数式接口

Lambda省略规则

可推导,可省略 1.()中参数类型可以省略 2.()参数唯一,()可以省略 3.{}内语句唯一,{}可以省略.

函数式接口

  • 有且仅有一个抽象方法
  • 注解:@FunctionalInterface

函数式编程

Lambda的延迟执行

  • 解决方法调用时,字符串参数无论方法内逻辑是否成立,都会先进行拼接的浪费问题.
  • Lambda的延迟执行并不是Lambda自身的优点,延迟执行的效果是根据接口进行实现的.即:满足效果才会调用接口的方法

函数式接口作为方法的参数

new Thread( ()->{sout("嘿嘿嘿")} ).start();

函数式接口作为方法的返回值

直接Returm一个Lambda表达式.

  • public Comparator<String> getComparator(){ return ()->{}; }

常用的函数式接口

生产型接口()

  • Supplier接口
    <T> get();
  • 用来产生数据,带有返回值的.

消费型接口

  • Consumer接口
    1.抽象方法:void accept(T t);
    2.默认方法:Consumer<T> andThen(Consumer<? super T> after)
    如果一个方法的参数和返回值都是Consumer类型,消费一个数据的时候,首先做一个操作,然后再做一个操作,实现组合.
  • 不生产数据,只使用数据.
    消费数据就是使用数据

判断(筛选)型接口

  • Predicate接
    1.抽象方法:boolean test(T t)
    2.默认方法:
    • and
    • or
    • nagate (取反)
  • 需要对某种类型数据进行判断,从而得到一个boolean值.

转换型接口

  • Function接口
    1.抽象方法: R apply(T t);
    根据类型T的参数获取类型R的结果。
    2.默认方法:andThen()
    用来进行组合操作
  • 根据一个数据类型得到另一个数据类型,前者是前置条件,后者是后置条件.

猜你喜欢

转载自blog.csdn.net/weixin_42651836/article/details/81324819