- Consumer<T> 是一個函數式接口
- jdk1.8加入。
- 代表一個“接受一個參數,但是不返回值”的函數
- 函數式方法是accept
源碼:
import java.util.Objects;
@FunctionalInterface
public interface Consumer<T> {
void accept(T t);
default Consumer<T> andThen(Consumer<? super T> after) {
Objects.requireNonNull(after);
return (T t) -> { accept(t); after.accept(t); };
}
}
看個例子,很簡單不再贅述。
import java.util.function.Consumer;
public class ConsumerTest {
public static void main(String[] args) {
ConsumerTest consumerTest = new ConsumerTest();
//傳入一個字符串,直接打印。
consumerTest.ai("你好 小丫", (item) -> System.out.println(item));
//傳入姓名,打印歡迎語
consumerTest.ai("小丫", (item) -> System.out.println("歡迎你 [" + item + "]"));
}
/**
* 定義了一個函數,傳入一個字符串,但是不返回值。
*
* @param str 傳入的參數
* @param consumer 行爲定義。
*/
private void ai(String str, Consumer<String> consumer) {
consumer.accept(str);
}
}
default方法 andThen:
import java.util.function.Consumer;
public class ConsumerTest {
public static void main(String[] args) {
ConsumerTest consumerTest = new ConsumerTest();
//傳入姓名,打印歡迎語,並打印輸入姓名的長度。
consumerTest.ai("小丫", item -> System.out.println("hello" + item), item -> System.out.println(item.length()));
}
/**
* 定義了一個函數,傳入一個字符串,但是不返回值。
*
* @param str 傳入的參數
* @param consumer 行爲定義。
* @param andThen 滯後的行爲
*/
private void ai(String str, Consumer<String> consumer, Consumer<String> andThen) {
consumer.andThen(andThen).accept(str);
}
}
輸出結果:
hello小丫
2
Process finished with exit code 0