Java8 Lambda - Functioanl Interface 函數式接口

在java 8 裏面新增了functional interface 這個概念。而且添加了新的annotation @FunctionalInterfaceI 
java


1 什麼是functional interface 函數式接口了?app

functional interface : functional interface only have 1 abstract method。 這就是函數接口的定義。簡單明白,函數接口其實就是一個抽象方法的接口(interface). ide


2 函數式接口的類型函數

這裏我只介紹基本的幾個類型Predicate<T>,Consumer<T>,Function<T, R>,Supplier<T>對象

這些函數式聲明在java.util.function這個包裏面, 你們能夠本身去看一下代碼。接口


1 Predicate<T>——接收T(generics)泛型對象並返回booleanit

boolean test (T t);io

經常使用於判斷, 例如stream.filter(Predicate<T>)function


2 Consumer<T>——接收Tgenerics)泛型對象,不返回值 class

void accept(T t)

用於做爲consumer 例如forEach(Consumer<T>)


3 Function<T, R>——接收Tgenerics)泛型對象,返回R(generics)泛型對象

T -> R

R apply(T t)

例子 stream.map(Function<T, R>)


4 Supplier<T>——提供Tgenerics)泛型對象(例如工廠),不接收值

() -> T



3. 細節注意

函數式接口裏面不是隻容許一個方法, 由於java 8 新添加了默認方法。因此函數式接口也是能夠有多個*(default method)默認方法。可是函數式接口只能有一個抽象方法(abstract method)。

相關文章
相關標籤/搜索