A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 長允 初级黑马   /  2018-11-29 14:22  /  827 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

函数式接口:

    有且仅有一个抽象方法的接口就是函数式接口(Object中定义的方法除外、静态方法、默认方法都不关注)

    使用注解:@FunctionalInterface可以去检查一个接口是否是函数式接口

Lambda:

    使用:用于简化匿名内部类,它本身不是匿名内部类。

    组成:
        一些参数 () 和被重写的方法的参数保持一致
        一个箭头 ->
        一段代码 {} 重写的方法要执行什么代码
   
    lambda的简化格式:
        1. 在参数列表中参数的类型可以省略
        2. 如果参数只有一个,连参数外的小括号都可以省略
        3. 如果重写方法中的代码只有一行,可以省略大括号分号和return
            要么都省略要么都不省略
   
    lambda优点:
        1. 简化代码书写
        2. 相比于匿名内部类,lambda不会生成class文件,一定程度上节约资源
        3. 相比于普通的代码,lambda有延迟执行的效果,被调用的时候才执行

常用的函数式接口:
1. Supplier<T> 生产型接口

        T get()
2. Consumer<T> 消费型接口
    void accept(T t)
    默认方法:
        andThen(Consumer after)  可以额外接收一个Consumer类型的数据,共同消费一个数据

3. Predicate<T> 判断型接口
    boolean test(T t)
    默认方法:
        and(Predicate other)  两个判断都需要满足结果才满足,相当于 &&
        or(Predicate other)  两个判断满足其一即可,相当于 ||
        negate()    取反 !

4. Function<T,R> 转换型接口
    R apply(T t)
    默认方法:
        andThen(Function after)
        compose(Function before)

        f1.andThen(f2).apply(t); f1先执行转换,得到一个结果作为第二次转换的参数
            等同于:f2.apply(f1.apply(t))
        f1.compose(f2).apply(t);

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马