掌握JDK8:(四)一個例子講函數式接口:Consumer

  • 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

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章