從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/