一、概述
- 在Java 8中引入了函数式编程的概念,并提供了一些新的函数式接口来支持函数式编程的需求。这些函数式接口可以简化代码、提高开发效率,并且可以应用于各种场景。
1、什么是函数式接口?
- 函数式接口是指只包含一个抽象方法的接口。在Java中,函数式接口可以被赋予Lambda表达式或者方法引用,从而实现函数式编程的特性。Java 8引入了一些新的函数式接口,如Function、Consumer、Supplier和Predicate等。
- 在
java.util.function
包下的都是
二、Function接口
- Function接口表示一个接受一个参数并产生结果的函数。它定义了一个名为apply的抽象方法,用于执行具体的函数逻辑。Function接口常用于对输入进行转换、映射或者计算的场景。
- 源码如下:
/** |
- 接收2个泛型:T(入参)和R(结果返回) ,默认需要实现的是
R apply(T t)
方法。使用示例如下:
/** |
还有其他2个默认方法:compose、andThen
compose: 返回一个组合函数,首先将入参应用到before函数,再将before函数结果应用到该函数中
Function<String, String> function = a -> a + " Jack!";
Function<String, String> function1 = a -> a + " Bob!";
String greet = function.compose(function1).apply("Hello");
System.out.println(greet); // Hello Bob! Jack!
andThen: 返回一个组合函数,该函数结果应用到after函数中
Function<String, String> function = a -> a + " Jack!";
Function<String, String> function1 = a -> a + " Bob!";
String greet = function.andThen(function1).apply("Hello");
System.out.println(greet); // Hello Jack! Bob!
常用的还有:
BiFunction<T,U,R>
接受两个参数并返回结果的函数
三、Consumer接口
- Consumer接口表示一个接受一个参数但没有返回值的操作。它定义了一个名为accept的抽象方法,用于执行具体的操作逻辑。Consumer接口常用于对输入进行处理、消费或者打印的场景。
- 示例:
public class ConsumerExample { |
BiConsumer<T,U>
提供两个自定义类型的输入参数,不返回执行结果
四、Supplier接口
- Supplier接口表示一个不接受参数但返回结果的函数。它定义了一个名为get的抽象方法,用于获取具体的结果。Supplier接口常用于延迟计算或者提供默认值的场景。
// 示例1 |
五、Predicate接口
- Predicate接口表示一个接受一个参数并返回布尔值的函数。它定义了一个名为test的抽象方法,用于执行具体的判断逻辑。Predicate接口常用于过滤、筛选或者判断的场景
- 简单示例如下:
public class PredicateExample { |
- 还有其他的函数式接口和上面几个差不多可以参看:
java.util.function