函数式接口
只有一个抽象方法的接口叫做函数式接口。这时就可以提供一个lambda表达式。
下面将介绍4个常用的函数式接口
- Supplier< T >
- Consumer< T >
- Function<T,R>
- Predicate< T >
1. Supplier< T >
Supplier接口中只有一个方法,需要实现的方法是get,该方法返回一个类型为T的值。
1 | T get(); |
下面的例子用该方法来返回数组中的最大值
1 | import java.util.function.Supplier; |
2. Consumer< T >
需要实现的方法为accept,接收一个T类型的参数,没有返回值。可以用来处理数据
1 | void accept(T var1); |
下面的例子用来输出字符串
1 | import java.util.function.Consumer; |
该接口还有另一个很实用的方法andThen,该方法提供了默认实现
1 | default Consumer<T> andThen(Consumer<? super T> after) { |
调用这个方法会返回一个Consumer对象,它的accept实现为依次调用两个对象的accept方法
下面用这个方法来输出两个不同的字符串
1 | public class consumer { |
3. Function<T,R>
需要实现的方法为apply,输入一个T类型的值,返回一个R类型的值,可以用来转换数据
1 | R apply(T var1); |
下面的例子为将字符串转换为数字
1 | import java.util.function.Function; |
它也有个andThen方法,不过和Consumer的不同
1 | default <V> Function<T, V> andThen(Function<? super R, ? extends V> after) { |
下面用这个方法来实现字符串转换数字并加5,然后再转换为字符串并输出
1 | import java.util.function.Function; |
4. Predicate< T >
需要实现的方法为test,该方法可以用来测试数据,返回一个boolean值
1 | boolean test(T var1); |
下面的例子用来检验字符串的长度
1 | import java.util.function.Predicate; |
Predicate
1 | default Predicate<T> and(Predicate<? super T> other) { |
下面用与运算来判断字符串的长度是否属于某个范围
1 | import java.util.function.Predicate; |
总结
以上接口只是函数式接口中常用的几个,还有其他如Runnable这样的接口也是很常见的。
这些接口大多数在处理流的时候出现,要熟练掌握lambda表达式,并对其进行运用。