Java基础知识_函数式接口
概述
函数式接口:有且仅有一个抽象方法的接口,Java中函数式编程体现就是lambda表达式,所以函数式接口就是适用于lambda使用的接口
注解:
@FunctionalInterface
常见的四个接口
Supplier接口
Supplier :包含一个无参的方法
T get():获得结果,该方法不需要参数
/**
* @author ming
* @date 2022-07-18 16:49
*/
public class SupplierDemo {
public static void main(String[] args) {
//String s = getString(new Supplier<String>() {
// @Override
// public String get() {
// return "小明";
// }
//});
String s = getString(() -> "小明");
System.out.println(s);
Integer i = getInteger(() -> 18);
System.out.println(i);
}
private static String getString(Supplier<String> s){
return s.get();
}
private static Integer getInteger(Supplier<Integer> s){
return s.get();
}
}
Consumer接口
Consumer 表示接受单个输入参数并且不返回结果的操作。 与大多数其他功能界面不同, Consumer预计将通过副作用进行操作。包含两个方法:
-
accept(T t)
对给定的参数执行此操作。
-
andThen(Consumer<? super T> after)
返回一个组合的 Consumer ,按顺序执行该操作,然后执行 after操作。
/**
* @author ming
* @date 2022-07-18 17:10
*/
public class ConsumerDemo {
public static void main(String[] args) {
operatorString("小明",name ->{
System.out.println(name);
});
operatorString("小明",name-> System.out.println(name),name -> System.out.println(new StringBuffer(name).reverse().toString()));
}
private static void operatorString(String name, Consumer<String> con1,Consumer<String> con2){
//con1.accept(name);
//con2.accept(name);
con1.andThen(con2).accept(name);//做了两次accept
}
private static void operatorString(String name, Consumer<String> con){
con.accept(name);
}
}
Predicate接口
Predicate 表示一个参数的谓词(判断,返回布尔值函数)
方法:
- boolean test(T t)
在给定的参数上评估这个谓词。 - and(Predicate<? super T> other)
返回一个组合的谓词,表示该谓词与另一个谓词的短路逻辑AND。 - or(Predicate<? super T> other)
返回一个组合的谓词,表示该谓词与另一个谓词的短路逻辑或。 - negate()
返回表示此谓词的逻辑否定的谓词。 - isEqual(Object targetRef)
返回根据 Objects.equals(Object, Object)测试两个参数是否相等的 谓词 。
/**
* @author ming
* @date 2022-07-18 17:31
*/
public class PredicateDemo {
public static void main(String[] args) {
boolean b1 = checkString("hello",s -> s.length()>0);
System.out.println(b1);
boolean b2 = checkString("helloworld",s -> s.length()>10,s -> s.length()<15);
System.out.println(b2);
}
private static boolean checkString(String s, Predicate<String> pre){
return pre.test(s);
}
private static boolean checkString(String s, Predicate<String> pre1,Predicate<String> pre2){
return pre1.and(pre2).test(s);
}
}
Function接口
Function<T,R> T - 函数输入的类型 R - 函数的结果类型 表示接受一个参数并产生结果的函数。
方法:
- andThen(Function<? super R,? extends V> after)
返回一个组合函数,首先将该函数应用于其输入,然后将 after函数应用于结果。 - apply(T t)
将此函数应用于给定的参数。 - compose(Function<? super V,? extends T> before)
返回一个组合函数,首先将 before函数应用于其输入,然后将此函数应用于结果。 - identity()
返回一个总是返回其输入参数的函数。