这是我参与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包下存在四大函数式接口下面我们来简单的分别介绍一下它们
四大函数式接口
Function 函数型接口
存在一个输入,存在一个输出
/**
* Function 函数型接口,有一个输入,有一个输出
* 只要是 函数式接口就可以用lambda表达式简化
*
* Predicate 断定型接口:有一个输入参数,返回一个布尔值
*
* Consumer 消费型接口:只有输入没有返回值
*
* Supplier 供给型接口:只有返回,没有参数
*/
Function function = new Function<String,String>() {
@Override
public String apply(String o) {
return null;
}
};
Predicate 断定型接口
存在一个输入参数,返回一个布尔值
/**
* Function 函数型接口,有一个输入,有一个输出
* 只要是 函数式接口就可以用lambda表达式简化
*
* Predicate 断定型接口:有一个输入参数,返回一个布尔值
*
* Consumer 消费型接口:只有输入没有返回值
*
* Supplier 供给型接口:只有返回,没有参数
*/
Predicate objectPredicate = new Predicate<String>() {
@Override
public boolean test(String o) {
return o.isEmpty();
}
};
Consummer 消费型接口
只有输入没有返回值
/**
* Function 函数型接口,有一个输入,有一个输出
* 只要是 函数式接口就可以用lambda表达式简化
*
* Predicate 断定型接口:有一个输入参数,返回一个布尔值
*
* Consumer 消费型接口:只有输入没有返回值
*
* Supplier 供给型接口:只有返回,没有参数
*/
Consumer<String> objectConsumer = new Consumer<String>() {
@Override
public void accept(String o) {
System.out.println(o);
}
};
Supplier 供给型接口
只有返回值没有参数
/**
* Function 函数型接口,有一个输入,有一个输出
* 只要是 函数式接口就可以用lambda表达式简化
*
* Predicate 断定型接口:有一个输入参数,返回一个布尔值
*
* Consumer 消费型接口:只有输入没有返回值
*
* Supplier 供给型接口:只有返回,没有参数
*/
Supplier<Integer> objectSupplier = new Supplier<Integer>() {
@Override
public Integer get() {
return 123123;
}
};