Java8 四大内置核心函数式接口
- Consumer 消费型接口
- Supplier 供给型接口
- Function 函数型接口
- Predicate 断言型接口
消费型、函数型、断言型都有BiConsumer、BiFunction、BiPredicate可以传递两个参数,使用方法都一样
Consumer:消费型接口(void accept(T t))
接收一个参数执行函数体里面内容,不做任何返回值
public class StartConsumer {
public static void main(String[] args) {
System.out.println("方法开始执行,传递回调函数一个值无返回结果");
System.out.println();
consumer((param) -> {
System.out.println("正在执行回调函数");
System.out.println("这是回调接收参数:" + param);
}, "我是第二个参数");
System.out.println();
System.out.println("------这是一条华丽的分隔线-----");
System.out.println();
consumer(StartConsumer::consum, "我是第二个参数");
}
private static void consumer(Consumer<String> consumer, String second) {
System.out.println("开始执行consumer方法,这是第二个参数:" + second);
System.out.println("--------开始执行回调函数--------");
consumer.accept("传给回调的参数");
System.out.println("--------回调函数执行结束--------");
}
private static void consum(String param){
System.out.println("正在执行回调函数");
System.out.println("这是回调接收参数:" + param);
}
Supplier:供给型接口(T get())
无参数接收并有一个返回值
public class StartSupplier {
public static void main(String[] args) {
System.out.println("方法开始执行,接收回调函数返回值");
System.out.println();
testSupplier(() -> {
System.out.println("正在执行回调函数");
return "回调运算结果";
}, "我是第二个参数");
System.out.println();
System.out.println("------这是一条华丽的分隔线------");
System.out.println();
testSupplier(StartSupplier::testSupp, "我是第二个参数");
}
private static void testSupplier(Supplier<String> supplier, String second) {
System.out.println("开始执行TestSupplier方法,这是第二个参数:" + second);
System.out.println("--------开始执行回调函数--------");
String returnSuppler = supplier.get();
System.out.println("--------回调函数执行结束--------");
System.out.println("这是回调函数返回结果:" + returnSuppler);
}
private static String testSupp(){
System.out.println("正在执行回调函数");
return "回调运算结果";
}
}
Function<T, R>:函数型接口(R apply(T t))
接收一个参数且有返回值(两种类型可以不一样)
public class StartFunction {
public static void main(String[] args) {
System.out.println("方法开始执行,传递回调函数一个值并接收返回值");
System.out.println();
func((param) -> {
System.out.println("正在执行回调函数");
System.out.println("这是回调接收参数:" + param);
return 6;
}, "我是第二个参数");
System.out.println();
System.out.println("------这是一条华丽的分隔线-----");
System.out.println();
func(StartFunction::fun, "我是第二个参数");
}
private static void func(Function<String, Integer> function, String second) {
System.out.println("开始执行func方法,这是第二个参数:" + second);
System.out.println("---------开始执行回调函数-----------");
Integer returnParam = function.apply("传给回调的参数");
System.out.println("---------回调函数执行结束-----------");
System.out.println("这是回调函数返回结果:" + returnParam);
}
private static Integer fun(String para) {
System.out.println("正在执行回调函数");
System.out.println("这是回调接收参数:" + para);
return 6;
}
}
Predicate:断言型接口(boolean test(T t))
接收一个参数并返回一个Boolean类型值
public class StartPredicate {
public static void main(String[] args) {
System.out.println("方法开始执行,接收回调函数返回值");
System.out.println();
testPredicate((param) -> {
System.out.println("正在执行回调函数");
System.out.println("这是回调接收参数:" + param);
return Boolean.TRUE;
}, "我是第二个参数");
System.out.println();
System.out.println("------这是一条华丽的分隔线------");
System.out.println();
testPredicate(StartPredicate::testPredication, "我是第二个参数");
}
private static void testPredicate(Predicate<String> predicate, String second) {
System.out.println("testPredicate,这是第二个参数:" + second);
System.out.println("--------开始执行回调函数--------");
boolean returnSuppler = predicate.test("传给回调的参数");
System.out.println("--------回调函数执行结束--------");
System.out.println("这是回调函数返回结果:" + returnSuppler);
}
private static Boolean testPredication(String param) {
System.out.println("正在执行回调函数");
System.out.println("这是回调接收参数:" + param);
return Boolean.TRUE;
}
}