Java学习笔记_函数式接口&方法引用

函数式接口:

        1.概述: 函数式接口在Java中是指有且仅有一个抽象方法的接口

        2.格式:

            修饰符 interface 接口名称 {

                // 定义一个抽象方法

                public abstract 返回值类型 方法名称(可选参数信息);

                // 其他非抽象方法内容

            }

        3.特点:

           3.1 可以使用Lambda表达式来表示函数式接口的对象

           3.2  函数式接口可以使用@FunctionalInterface注解来标识,如果不是函数式接口,就不能使用该注解来标识

 

方法引用:

下面两种写法,完全等效:

  • Lambda表达式写法:s -> System.out.println(s);

  • 方法引用写法:System.out::println

    1.格式  使用::冒号把方法直接引过来

        通过对象引用成员方法: 对象名::方法名

        通过类名引用静态方法: 类名::静态方法名

        通过super引用父类的方法: super::父类的方法名

        通过this引用本类的成员方法: this::本类的方法名

        类的构造引用: 类名::new

        数组的构造引用: 数组类型::new

    2.什么情况下可以使用方法引用替换Lambda表达式

        如果Lambda要表达的函数方案已经存在于某个方法的实现中,那么则可以通过双冒号来引用该方法作为Lambda的替代者

        简而言之:就是Lambda的解决方案就是调用一个已经存在的方法,那么这个时候就可以使用方法引用替换Lmabda表达式

    3.可推导可省略

        如果使用方法引用,也是同样可以根据上下文进行推导。

 

Supplier接口: 

    java.util.function.Supplier<T>接口仅包含一个无参的方法:T get() 用来获取一个泛型参数指定类型的对象数据。由于这是一个函数式接口,这也就意味着对应的Lambda表达式需要“对外提供”一个符合泛型类型的对象数据。

 

Consumer接口:

    1.java.util.function.Consumer<T>接口则正好相反,它不是生产一个数据,而是消费一个数据,其数据类型由泛型参数决定。只进不出

    2.抽象方法:accept

        Consumer接口中包含抽象方法void accept(T t),意为消费一个指定泛型的数据。

    3.默认方法 andThen:  其实就是消费2次

         default Consumer<T> andThen(Consumer<? super T> after) {

                Objects.requireNonNull(after);// 判断after对象是否为null

                return (T t) -> { accept(t); after.accept(t); };

            }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值