12.函数式接口、方法引用

  1. 复习:Lamda的省略规则:

  1. 接口名称
  2. 方法名称可以省略
  3. 参数类型可以省略
  4. 如果参数有且仅有一个,那么括号可以省略
  5. 如果语句有且仅有一个,那么无论有没有返回值,return可以省略

2、函数式接口

a.      概念:有且仅有一个需要实现的抽象方法的接口

b.     作用: 1可以当做普通接口使用:implements、@Override

2可以当做Lambda使用的前提

c.      注解:@FunctionInterface用来检测是否是一个函数式接口

d.     注意:这个注解就算不写,也算是函数式接口,但是仍要写上为好。

3、接口

a.      无参数、无返回值的函数式接口

 

b.     有参数、有返回值的函数式接口

4、延迟执行

a.      如果条件满足,则执行lamda,否则条件不足,不会执行lamda.

         就是节省了性能资源。例如:拼接性能浪费。

5、使用lambda作为返回值

a.      使用Lambda作为方法的返回值,其实就是使用函数式接口作为方法的返回值。

b.      举例说明:

new Thread(new Runnable() {

                   @Override

                   public void run() {

                            // ...

                   }

         }).start();

 

 

 

         new Thread(() -> {...}).start();

        

         Runnable task = () -> {...};

         new Thread(task).start();

        

         public static Runnable getRunnable() {

                   Runnable task = () -> {...};

                  return task;

         }

         Runnable task = getRunnable();

         new Thread(task).start();

        

         public static Runnable getRunnable() {

                   return () -> {...};

         }

 

6、lambda的优化

a.      方法引用:本来Lambda的做法是:给我来一个字符串,然后我将它原封不动转交给

println方法。现在方法引用的做法是:直接去找println方法。

b.      使用建议:如果Lambda所做的事情,和已经存在的某一个方法所做的事情完全一样,

那么就可以省去Lambda转交的过程,直接使用方法引用。

c.      方法引用符“::”(两个英文冒号连写)

d.      备注:虽然方法引用“System.out::println”可以对应到很多个重载方法上。

只有一个(String str)这种参数才能直接匹配上。

7、关于方法引用“::”的写法常用的4+2用法:

a.      对于类的来说

         a)      对象名引用成员方法名

                   格式:对象名::成员方法名

         b)      通过类名称引用静态方法

                   格式:类名称::静态方法名

         c)      通过super引用父类方法,

格式super::父类方法名

         d)      通过this引用本类方法

                   格式this::本类方法名

b.     对于构造器来说

         a)      类的构造器引用

                   格式:类名称::new

         b)      数组的构造器引用

                   格式:数据类型 ::new

 

8、Java8 提供的函数式接口,全位于:Java.util.function包

         a)      Superlier<T>接口当中的唯一的抽象方法:

                  T get():作用是对外提供的一个指定泛型类型的对象。

         b)     consumer<T>函数式接口

i.       java.util.function.consumer<T>

                   其中仍然只有一个抽象方法;

                   ii.      Void accept(T t):消费一个数据

                   iii.     函数拼接

           andThen方法可以将两个Consumer拼接成为一个大的Consumer,包含本来的两个动作。

                            先执行自己的accept拼接别人的accept,这两个动作弄到一个动作里,

然后这个过程就是andThen.

                  iv      使用步骤:

举例一、

举例二、

举例三、

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值