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;
}
}