JUC并发编程——四大内置函数式接口

552 阅读2分钟

小知识,大挑战!本文正在参与「程序员必备小知识」创作活动

本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。

JUC并发编程——四大内置函数式接口

函数式接口(Functional Interface)就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。

由于默认方法(default)已经有了实现,所以它们不是抽象方法。

如果一个接口中声明的抽象方法是重写了超类Object类中任意一个public方法,那么这些抽象方法并不会算入接口的抽象方法数量中。

函数式适用于函数式编程,Java中的函数式编程体现就是Lambda,所以函数式接口就是可以适用于Lambda使用的接口。

1、函数型接口

Function<T,R> :接受一个输入参数,返回一个结果。

Function<T,R> 源码:

在这里插入图片描述

Function<T,R> 代码实例:

public class Demo01 {
    public static void main(String[] args) {
        
//        Function function = new Function<String, String>() {
//            @Override //输出输入的值
//            public String apply(String s) {
//                return s;
//            }
//        };
//        System.out.println(function.apply("s"));
        
        
        
        //转换成lambda表达式
        Function function = (s)->{return s;};
        System.out.println(function.apply("s"));

    }
}

2、断定型接口

Predicate<T>:接受一个输入参数,返回一个布尔值结果

Predicate<T>源码:

在这里插入图片描述

Predicate<T>代码实例:

public class Demo02 {
    public static void main(String[] args) {
//        Predicate<String> predicate = new Predicate<String>() {
//            @Override//判断传入的值是否为空
//            public boolean test(String str) {
//                return str.isEmpty();
//            }
//        };
//        System.out.println(predicate.test(""));//true

        //转换成lambda表达式
        Predicate<String> predicate =(str)->{ return str.isEmpty();};
        System.out.println(predicate.test("123"));//false
    }
}

3、消费型接口

Consumer<T> :代表了接受一个输入参数并且无返回的操作

Consumer<T>源码:

在这里插入图片描述

Consumer代码实例:

public class Demo03 {
    public static void main(String[] args) {
//        Consumer<String> consumer = new Consumer<String>() {
//            @Override//打印字符串
//            public void accept(String s) {
//                System.out.println(s);
//            }
//        };
//        consumer.accept("打印字符串");//打印字符串
        //转换成lambda表达式
        Consumer<String> consumer = (s)->{System.out.println(s);};
        consumer.accept("打印");//打印
    }
}

4、供给型接口

Supplier<T>无参数,返回一个结果。

Supplier<T>源码:

在这里插入图片描述

Supplier<T>代码实例:

public class Demo04 {
    public static void main(String[] args) {
//        Supplier<Integer> supplier = new Supplier<Integer>() {
//            @Override
//            public Integer get() {
//                return 1024;
//            }
//        };
//        System.out.println(supplier.get());//1024
        //转换成lambda表达式
        Supplier<String> supplier = ()->{return "abcd";};
        System.out.println(supplier.get());//abcd
    }
}