Java8 四大內置核心函數式接口

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;

    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章