编程技术文章分享与教程

网站首页 > 技术文章 正文

函数式接口(函数式接口有哪些)

hmc789 2024-11-16 20:57:21 技术文章 2 ℃

函数式接口的概念

函数式接口:接口中只有一个抽象方法。

函数式接口主要配合Lambda表达式使用。

如何检测一个接口是否是函数式接口,可以使用 @FunctionalInteface 注解,在编译时进行检查。

符合函数式接口的可以不用添加 @FunctionalInterface 也可以正常使用。


如何理解函数式接口

接口只有被实现后才能调用对应的方法。如果不想编写一个类实现接口中的方法,可以使用匿名类直接生成一个对象进行调用。

函数式接口的好处在于类中只用一个抽象方法,当使用Lambda表达式,刚好就是一个匿名类调用唯一的一个方法。


java 内置的四个函数式接口

函数式接口

参数类型

返回值类型

用途

Consumer<T>

T

void

操作T对象,无返回值。accept()

Supplier<T>

void

T

返回对象T。 get()

Function<T,R>

T

R

操作T对象,返回R对象。apply()

Predicate<T>

T

boolean

T对象进行判断,是否满足条件。test()

Comsumer 示例:

//匿名类
        Consumer<String> consumer = new Consumer<>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        };
        consumer.accept("comsumer");
        //Lamdba 表达式
        Consumer<String> consumerLambda = (s) -> System.out.println(s);
        consumerLambda.accept("consumerLambda");

Supplier示例:

Supplier<String> supplier = new Supplier<>() {
            @Override
            public String get() {
                return "supplier hello";
            }
        };
        System.out.println(supplier.get());

        Supplier<String> supplierLambda = () ->  "supplierLambda";
        System.out.println(supplierLambda.get());

Function示例:

Function<Integer, String> function = new Function<>() {
            @Override
            public String apply(Integer integer) {
                return String.valueOf(integer);
            }
        };
        System.out.println(function.apply(100));

        Function<Integer,String> functionLambda = (i) -> String.valueOf(i);
        System.out.println(functionLambda.apply(120));

Predicate示例:

Predicate<Integer> predicate = new Predicate<>() {
            @Override
            public boolean test(Integer integer) {
                return integer > 10;
            }
        };

        System.out.println(predicate.test(100));
        Predicate<Integer> predicateLambda = (i) -> i > 10;
        System.out.println(predicateLambda.test(5));

小结:

Lambda表达式组成 ()-> {} ,当只有一个参数时 ()可以省略,当只用一行代码时{} 可以省略。

根据匿名类和Lambda表达式的对比,可以找出规律。Lambda表达式中 ()就是函数式接口匿名类中方法的 参数列表 ,Lambda表达式{} 就是 函数式接口匿名类 方法中对应的代码块。

标签列表
最新留言