函数式接口相关知识点

这里写目录标题

  • 函数式接口
    • 简介以及注意点
    • 函数式接口作为方法的参数
    • 函数式接口作为方法参数
    • 常用的函数式接口
      • Supplier
        • 简介
        • 具体代码操作
      • Consumer
        • 简介
        • 具体代码演示
          • 演示1
          • 演示2
      • Predicate接口
        • 简介以及接口中的方法
        • text和negate方法
        • and和or方法
        • Function方法
          • 简介
          • 具体操作1
          • 具体操作2

函数式接口

简介以及注意点

函数式接口相关知识点_第1张图片
函数式接口相关知识点_第2张图片
lambda表达式赋值给了接口,足以说明,当接口是函数式接口时,lambda表达式就是该接口的一个实例化对象,所以这样就用多态的方式创建了一个接口对象,用该对象可以调用接口中的方法,lambda表达式可以视为接口的一个实现类,从而多态的原则进行编译运行,编译看左边,运行看右边。

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

函数式接口相关知识点_第3张图片
函数式接口相关知识点_第4张图片
lambda表达式是函数式接口的一个实例化对象,参数与接口中抽象方法的参数对应,所以main方法里最后一句就是调用自定义方法并将lambda表达式当作参数传入,而自定义方法的形参是一个接口,所以效果相当于把接口实例化

函数式接口作为方法参数

函数式接口相关知识点_第5张图片
函数式接口相关知识点_第6张图片
函数式接口相关知识点_第7张图片

常用的函数式接口

Supplier

(Java以及定义好的接口)

简介

函数式接口相关知识点_第8张图片

具体代码操作

函数式接口相关知识点_第9张图片
这里Supplier是一个函数式接口,是Java已经定义好了的函数式接口,只有一个无参抽象方法,get方法,他是一个生产型接口,定义时,规定他的类型,他的返回值也就同步被规定了,

Consumer

(Java以及定义好的接口)

简介

函数式接口相关知识点_第10张图片

具体代码演示

演示1


自定义方法有两个参数,第一个是一个字符串,第二个是一个函数式接口,所以,main方法调用自定义函数的时候,参数位置,一个传入字符串,一个传入lambda表达式。所以自定义方法的形参列表仍旧遵循,函数体需要啥,就定义啥,不会因为接口作为参数而改变,接口也是参数的一员。

注意,自定义方法要用接口对象调用接口中的抽象方法以表示重写,接口中的非抽象方法无需重写。

演示2

函数式接口相关知识点_第11张图片
这是接口中的第二个方法,该代码跟上面两行效果等效,因为该方法本质上还是调用了accep方法,所以抽象方法仍然被重写了

Predicate接口

(Java以及定义好的接口)

简介以及接口中的方法

函数式接口相关知识点_第12张图片
注意 其中test方法是接口的抽象方法

text和negate方法

函数式接口相关知识点_第13张图片
函数式接口相关知识点_第14张图片
注意 这里先调用negate方法之后又调用test,是可以的
函数式接口相关知识点_第15张图片

and和or方法

函数式接口相关知识点_第16张图片
这是and方法,注意,and方法的底层还是调用了test方法,所以符合接口的原则
格式 第一个接口参数.and(第二个接口参数).test(被测试参数)
函数式接口相关知识点_第17张图片

函数式接口相关知识点_第18张图片
这是and方法的底层逻辑

Function方法

(java以及定义好的函数式接口)

简介

函数式接口相关知识点_第19张图片
他可以用于将一个值转换为另一个类型的新值
其中,apply是抽象方法

具体操作1

函数式接口相关知识点_第20张图片
注意 int不能作为泛型,所以当方法参数某个位置是泛型,那么设置int的时候 就要用int的包装类,Integer类

具体操作2

在这里插入图片描述
这是main方法里的调用方法语句,以及lambda表达式的内容
在这里插入图片描述
这是自定义方法,需要三个参数

注意 对于第一条语句,fun1.apply(s)调用之后,会进入main方法里对应的lambda表达式的代码体里进行运行,之后回到自定义方法的第一条语句,赋值给Integer

函数式接口相关知识点_第21张图片
上面的自定义方法里的代码块可以改进成如上,利用andthen方法并最后调用apply传入最开始的参数,同时最后应该用最后的参数类型接住

你可能感兴趣的:(java)