一、功能性接口Function<T,R>
有参数,有返回值
是接受一个T类型的数据,返回一个R类型结果方法的抽象
通过调用apply方法执行内容
例:给一个字符串,返回字符串的长度
代码如下:
public static void main(String[] args) {
String str = "wocaizhongguo";
Integer length = testFun(str,(s)->s.length());
System.out.println(length);
}
private static Integer testFun(String str, Function<String,Integer> fun) {
Integer length = fun.apply(str);
return length;
}
二、消费型接口 Consumer
有输入参数,没有返回值
对应的方法类型为接收一个参数,没有返回值
一般来说Consumer接口往往伴随着一些期望状态的改变
或者事件的发生,典型的forEach就是,没有输出结果但是在控制台输出结果
Consumer使用accpet对参数 执行行为
例:输出字符串
public static void main(String[] args) {
String str = "wocaizhongguo";
testFum(str,(s)->System.out.println(str));
}
private static void testFum(String str, Consumer<String> fun) {
fun.accept(str);
}
三、供给型接口:Supplier
无传入参数、有返回值
该接口不接受传入参数,但是返回一个返回值
使用get()方法获取这个返回值
public static void main(String[] args) {
String str = "wocaizhongguo";
String sup = testFun(()->str);
System.out.println(sup);
}
private static String testFun(Supplier<String> sup) {
String s = sup.get();
return s;
}
四、断言型接口:Predicate
有传入参数,返回值是布尔类型
该接口接收一个传入的参数,返回一个布尔类型的值
多用于判断和过滤,使用test()方法执行这段行为
例:输入字符串,判断长度是否大于0
public static void main(String[] args) {
String str = "wocaizhongguo";
boolean flag = testFun(str,(s)->s.length()>0);
System.out.println(flag);
}
private static boolean testFun(String str, Predicate<String> pre) {
boolean flag = pre.test(str);
return flag;
}