Java8函數(shù)式接口編程入門(mén),簡(jiǎn)單幾行讓你的代碼更優(yōu)雅
函數(shù)式接口(Functional Interface)就是一個(gè)有且僅有一個(gè)抽象方法,但是可以有多個(gè)非抽象方法的接口。
JDK8中新增了一個(gè)很重要的包:java.util.function,在這個(gè)包下的所有接口都是函數(shù)式接口。通過(guò)函數(shù)式接口,可以極大的簡(jiǎn)化我們的代碼,讓我們的代碼看起來(lái)更簡(jiǎn)潔。
包中的接口雖然多,但是大致可以分為4大類(lèi),分別是Consumer(消費(fèi)型)、Supplier(供給型)、Predicate(謂詞型)、Function(功能型)。
函數(shù)式接口雖然看起來(lái)很抽象,但是一旦理解了其原理,使用起來(lái)還是很簡(jiǎn)單的。
1、Consumer消費(fèi)型
Consumer接口會(huì)接受一個(gè)輸入?yún)?shù),但是不會(huì)有返回結(jié)果,一般用于對(duì)某個(gè)輸入對(duì)象做一些加工操作。
Consumer的一個(gè)經(jīng)典使用場(chǎng)景就是集合的foreach方法了。
點(diǎn)開(kāi)foreach方法可以看到該方法接受了一個(gè)Consumer<? super E> action參數(shù)。
ArrayList的foreach實(shí)現(xiàn)
應(yīng)用示例:
2、Supplier供給型
Supplier接口不接受參數(shù),用于生產(chǎn)我們需要的數(shù)據(jù)。
Supplier的應(yīng)用很簡(jiǎn)單,一般用于產(chǎn)生隨機(jī)數(shù),訂單號(hào),工廠生產(chǎn)對(duì)象等等。
3、Predicate謂詞型
Predicate接受一個(gè)輸入?yún)?shù) T,返回一個(gè)布爾值結(jié)果,常用于數(shù)據(jù)的校驗(yàn)。
4、Function功能型
Function的使用也比較廣泛,它接受一個(gè)參數(shù),并且會(huì)對(duì)參數(shù)進(jìn)行計(jì)算加工產(chǎn)生另一個(gè)參數(shù)。
最后再說(shuō)一下函數(shù)式編程與命令式編程的區(qū)別:
命令式編程就是我們要告訴代碼怎么做,比如要實(shí)現(xiàn)一些功能,那就把這個(gè)功能的詳細(xì)過(guò)程通過(guò)代碼一行行的寫(xiě)好。
函數(shù)式編程就是我們要告訴代碼做什么,是一種方法論,說(shuō)白了就是調(diào)用某個(gè)API去編程。
總得來(lái)說(shuō)呢,函數(shù)式的編程確實(shí)可以簡(jiǎn)化我們的代碼,讓我們以更簡(jiǎn)單的方式去完成某些比較復(fù)雜的功能,但是也有些朋友會(huì)覺(jué)得函數(shù)式編程過(guò)于抽象,不好理解。
不知道大家在平時(shí)項(xiàng)目中使用函數(shù)式編程的頻率有多少呢?