函數式接口是伴隨著Stream的誕生而出現的,Java8Stream 作為函數式編程的一種具體實現,各種操作符配合簡潔明瞭的函數式接口給開發者帶來了簡單快速處理數據的體驗。
函數式接口
什麼是函數式接口?簡單來說就是隻有一個抽象函數的接口。為了使得函數式接口的定義更加規範,java8 提供了@FunctionalInterface 註解告訴編譯器在編譯器去檢查函數式接口的合法性,以便在編譯器在編譯出錯時給出提示。為了更加規範定義函數接口,給出如下函數式接口定義規則:
有且僅有一個抽象函數必須要有@FunctionalInterface 註解可以有默認方法Runable最常見的函數式接口
函數式接口詳細介紹
Java8 util.function 包下自帶了43個函數式接口,大體分為以下幾類:
Consumer 消費接口Function 功能接口Operator 操作接口Predicate 斷言接口Supplier 生產接口Consumer消費者接口,就是用來消費數據的。
Consumer 接口中有accept 抽象方法,accept接受一個變量,也就是說在使用這個函數式接口的時候,接口提供數據,只要接收使用就可以了;andThen 是一個默認方法,接受一個Consumer 類型,可以對數據繼續進行消費。
Function:提供一種轉換功能
Function 接口 最主要的就是apply 函數,apply 接受T類型數據並返回R類型數據,就是將T類型的數據轉換成R類型的數據,它還提供了compose、andThen、identity 三個默認方法,compose 接受一個Function,andThen也同樣接受一個Function,這裡的andThen 與Consumer 的andThen 類似,在apply之後在apply一遍,compose 則與之相反,在apply之前先apply(這兩個apply具體處理內容一般是不同的)identity()返回一個輸出跟輸入一樣的Lambda表達式對象下篇詳細介紹
Operator可以簡單理解成算術中的各種運算操作,當然不僅僅是運算這麼簡單,因為它只定義了運算這個定義,但至於運算成什麼樣你說了算。如 IntBinaryOperator
IntBinaryOperator 接口內只有一個applyAsInt 方法,其接收兩個int 類型的參數,並返回一個int 類型的結果
Predicate斷言、判斷,對輸入的數據根據某種標準進行評判,最終返回boolean值:
Predicate的test 接收T類型的數據,返回 boolean 類型,即對數據進行某種規則的評判,如果符合則返回true,否則返回false;Predicate接口還提供了 and、negate、or,與 取反 或等,isEqual 判斷兩個參數是否相等等默認函數。
Supplier生產、提供數據:
本次就介紹到這裡,下篇代碼實戰。