从JDK8开始java支持函数式编程,JDK也提供了几个常用的函数式接口,这篇主要介绍Consumer接口。
文本介绍的顺序依次为:
- 源码介绍
- 使用实例
- jdk内对Consumer的典型使用
- 扩展类介绍
源码介绍
1
|
package java.util.function;
|
源码只有2个方法,也比较容易理解,我们下面来看一下具体的使用方法。
使用实例
1
|
package jdk8;
|
下面是执行结果:
1
|
print square : 4
|
在testAndThen()方法的执行结果可以看到打印的顺序和出现异常的情况(third x : 1 并没有输出)
上面只是一个简单的使用,主要为了说明使用方式。对于Consumer的工作实践目前还未使用,并没有好的例子。
jdk内对Consumer的典型使用
在jdk内对Consumer的典型使用非foreach莫属了(在 java.lang.Iterable内),下面是源码:
1
|
/**
|
方法接收一个Consumer对象,对this集合执行循环相同的操作。
TODO:除Iterable外还有很多地方使用到了Consumer,待后续使用到在添加。
扩展类介绍
Consumer的accept只接受一个参数,那如果要是想使用多个参数要怎么办?jdk8又提供了一个BiConsumer接口类,该类与Consumer的区别是可以接受2个参数。
jdk8还对Consumer和BiConsumer各提供了3个常用的相关接口类,见下表:
类名 | 描述 |
IntConsumer | 接受单个int型参数的Consumer操作 |
DoubleConsumer | 接受单个double型参数的Consumer操作 |
LongConsumer | 接受单个long型参数的Consumer操作 |
ObjIntConsumer | 接受2个int型参数的Consumer操作,不支持andThen方法 |
ObjDoubleConsumer | 接受2个double型参数的Consumer操作,不支持andThen方法 |
ObjLongConsumer | 接受2个long型参数的Consumer操作,不支持andThen方法 |
转载链接:http://www.sanjinbest.com/uncategorized/JAVA-8-函数式接口-Consumer/