函数式接口相关知识点

函数式接口

简介以及注意点

在这里插入图片描述
在这里插入图片描述
lambda表达式赋值给了接口,足以说明,当接口是函数式接口时,lambda表达式就是该接口的一个实例化对象,所以这样就用多态的方式创建了一个接口对象,用该对象可以调用接口中的方法,lambda表达式可以视为接口的一个实现类,从而多态的原则进行编译运行,编译看左边,运行看右边。

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

在这里插入图片描述
在这里插入图片描述
lambda表达式是函数式接口的一个实例化对象,参数与接口中抽象方法的参数对应,所以main方法里最后一句就是调用自定义方法并将lambda表达式当作参数传入,而自定义方法的形参是一个接口,所以效果相当于把接口实例化

函数式接口作为方法参数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

常用的函数式接口

Supplier

(Java以及定义好的接口)

简介

在这里插入图片描述

具体代码操作

在这里插入图片描述
这里Supplier是一个函数式接口,是Java已经定义好了的函数式接口,只有一个无参抽象方法,get方法,他是一个生产型接口,定义时,规定他的类型,他的返回值也就同步被规定了,

Consumer

(Java以及定义好的接口)

简介

在这里插入图片描述

具体代码演示
演示1

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

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

演示2

在这里插入图片描述
这是接口中的第二个方法,该代码跟上面两行效果等效,因为该方法本质上还是调用了accep方法,所以抽象方法仍然被重写了

Predicate接口

(Java以及定义好的接口)

简介以及接口中的方法

在这里插入图片描述
注意 其中test方法是接口的抽象方法

text和negate方法

在这里插入图片描述
在这里插入图片描述
注意 这里先调用negate方法之后又调用test,是可以的
在这里插入图片描述

and和or方法

在这里插入图片描述
这是and方法,注意,and方法的底层还是调用了test方法,所以符合接口的原则
格式 第一个接口参数.and(第二个接口参数).test(被测试参数)
在这里插入图片描述

在这里插入图片描述
这是and方法的底层逻辑

Function方法

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

简介

在这里插入图片描述
他可以用于将一个值转换为另一个类型的新值
其中,apply是抽象方法

具体操作1

在这里插入图片描述
注意 int不能作为泛型,所以当方法参数某个位置是泛型,那么设置int的时候 就要用int的包装类,Integer类

具体操作2

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

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

在这里插入图片描述
上面的自定义方法里的代码块可以改进成如上,利用andthen方法并最后调用apply传入最开始的参数,同时最后应该用最后的参数类型接住

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值