37 常用函数式接口
1.1 Supplier 接口
java.util.function.Supplier<T>
接口仅包含一个无参的方法:T get( )。用来获取一个泛型参数指定类型的对象数据。java.util.function.Supplier<T>
接口被称之为生产型接口,指定接口的泛型是什么类型,那么接口中的get方法就会生成什么类型的数据
1.1.1 示例代码
Supplier<T>
接口指定为 Integer,那么 get( ) 方法的返回值也只能为 Integer。试图返回其他类型的数据时,编译器无法通过编译。总的来说 Supplier<T>
接口是要啥给啥(根据泛型返回一个数据)
1.2 Consumer 接口
java.util.function.Consumer<T>
接口则正好与 Supplier 接口相反,它不是生产一个数据,而是消费一个数据,其数据类型由泛型决定 。Consumer 接口中包含抽象方法 voidaccept(T t)
,意为消费一 个指定泛型的数据。
1.2.1 示例代码
1.2.2 andThen( ) 方法
如果一个方法的参数和返回值全都是 Consumer 类型,那么就可以实现效果:消费数据的时候,首先做一个操作,然后再做一个操作,实现组合。而这个方法就是 Consumer 接口中的 default 方法 andThen。
☞ andThen 源码
☞ 示例代码
进行组合消费时,谁在前先消费谁。
1.3 Predicate 接口
java.util.function.Predicate<T>
接口可以对某种类型的数据进行判断,从而得到一个 boolean 值结果。Predicate 接口中包含一个抽象方法:booleantest(T t)
用来对指定数据类型数据进行判断的方法,结果:符合返回 true,不符合返回 false
1.3.1 示例代码
1.3.2 默认方法
既然是条件判断,就会存在与、或、非三种常见的逻辑关系。其中将两个 Predicate 条件使用“与”逻辑连接起来实现“并且”的效果时,可以使用默认方法 and。实现逻辑关系中的“或”,可以使用默认方法or。实现逻辑关系中的“非”,可以使用默认方法 negate。
☞ and 源代码
☞ or 源代码
☞ negate 源代码
and、or、negate 方法都要在 test( ) 方法之前。
☞ 示例代码
1.4 Function 接口
java.uti1.function.Function<T,R>
接口用来根据一个类型的数据得到另一个类型的数据,前者称为前置条件,后者称为后置条件。Function 接口中最主要的抽象方法为:Rapply(T t)
根据类型 T 的参数获取类型 R 的结果。