这里写目录标题
函数式接口
简介以及注意点
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传入最开始的参数,同时最后应该用最后的参数类型接住