四大接口函数

149 阅读3分钟

这是我参与11月更文挑战的第18天,活动详情查看:2021最后一次更文挑战

前言

四大函数式接口是现在java程序员所必备的知识,我们在很多地方都可以了解到现在我们来简单的了解一下它们

Function 函数型接口,有一个输入,有一个输出 只要是 函数式接口就可以用lambda表达式简化

Predicate 断定型接口:有一个输入参数,返回一个布尔值

Consumer 消费型接口:只有输入没有返回值

Supplier 供给型接口:只有返回,没有参数

啥是函数式接口?

简单的来说函数式接口就是只有一个方法的接口

比如我们之前使用的Runnable接口

@FunctionalInterface
public interface Runnable {
 /**
     * When an object implementing interface <code>Runnable</code> is used
     * to create a thread, starting the thread causes the object's
     * <code>run</code> method to be called in that separately executing
     * thread.
     * <p>
     * The general contract of the method <code>run</code> is that it may
     * take any action whatsoever.
     *
     * @see     java.lang.Thread#run()
     */
    public abstract void run();
}
// @FunctionalInterface
// 简化编程模型、在新版本的框架底层大量使用

在java.util.function包下存在四大函数式接口下面我们来简单的分别介绍一下它们

image-20211112190416223

四大函数式接口

Function 函数型接口

存在一个输入,存在一个输出

image-20211112192132375

/**
 * Function 函数型接口,有一个输入,有一个输出
 * 只要是 函数式接口就可以用lambda表达式简化
 *
 * Predicate 断定型接口:有一个输入参数,返回一个布尔值
 *
 * Consumer 消费型接口:只有输入没有返回值
 *
 *  Supplier 供给型接口:只有返回,没有参数
 */
Function function = new Function<String,String>() {
            @Override
            public String apply(String o) {
                return null;
            }
        };

Predicate 断定型接口

存在一个输入参数,返回一个布尔值

image-20211112194845556

/**
 * Function 函数型接口,有一个输入,有一个输出
 * 只要是 函数式接口就可以用lambda表达式简化
 *
 * Predicate 断定型接口:有一个输入参数,返回一个布尔值
 *
 * Consumer 消费型接口:只有输入没有返回值
 *
 *  Supplier 供给型接口:只有返回,没有参数
 */
Predicate objectPredicate = new Predicate<String>() {
            @Override
            public boolean test(String o) {
                return o.isEmpty();
            }
        };

Consummer 消费型接口

只有输入没有返回值

image-20211113092405383

/**
 * Function 函数型接口,有一个输入,有一个输出
 * 只要是 函数式接口就可以用lambda表达式简化
 *
 * Predicate 断定型接口:有一个输入参数,返回一个布尔值
 *
 * Consumer 消费型接口:只有输入没有返回值
 *
 *  Supplier 供给型接口:只有返回,没有参数
 */
Consumer<String> objectConsumer = new Consumer<String>() {
            @Override
            public void accept(String o) {
                System.out.println(o);
            }
        };

Supplier 供给型接口

只有返回值没有参数

image-20211113092924387

/**
 * Function 函数型接口,有一个输入,有一个输出
 * 只要是 函数式接口就可以用lambda表达式简化
 *
 * Predicate 断定型接口:有一个输入参数,返回一个布尔值
 *
 * Consumer 消费型接口:只有输入没有返回值
 *
 *  Supplier 供给型接口:只有返回,没有参数
 */
 Supplier<Integer> objectSupplier = new Supplier<Integer>() {
            @Override
            public Integer get() {
                return 123123;
            }
        };