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;

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