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