Java8 有一些新的特性,今天老顧給你們分享一下關於 Lambda 表達式的由來,一開始感受 Lambda 可讀性蠻差的,不知道 爲何 Java8 會出來這個表達式?既然大佬們推出來,確定是有緣由的,應該是爲了解決一些問題,那咱們就看看解決了什麼問題?java
班導想了解一下各個同窗的相關狀況:程序員
上面的僞代碼,是否是很簡單,寫一個方法,直接過濾出蘇州地區的學生。面試
班導又想知道來自北京的有哪些同窗,那代碼執行優化一下,能夠動態傳地區參數。算法
這樣是否是就解決了,全部地區的查詢問題,把地區做爲一個參數。設計模式
問題好像獲得瞭解決,忽然班導又要知道同窗們的年齡分佈。學習
這一次直接到位,把年齡參數化。優化
咱們發現由於班導的兩個需求,根據地區和年齡查找學生,咱們程序員提供了兩個方法,filterStudentByArea 和 filterStudentByAge。設計
咱們小夥伴們有沒有發現,此兩個方法裏面的代碼是否是很像,有不少重複的代碼。不過知足需求就好了,還能接受是吧。code
由於上面是兩個方法,不少小夥伴會想到能夠改爲一個方法,用 flag 標記查詢的業務。視頻
改成一個方法,flag 爲 true 表示根據年齡範圍查找學生;flag 爲 false,表示查地區裏面的學生
調用方式
List<Student> areaStudentList = filterStudent(students,"蘇州",0,false); List<Student> ageStudentList = filterStudent(students,"",20,true);
雖然改造了一個方法,但實現方式比較噁心。
小夥伴們會說那就不要優化了,兩個方法就兩個唄。其實若是需求不變了,這樣也是沒問題的,但若是班導又提出要根據學生成績進行查詢,或又要根據學生的體重、身高等;每增長一個維度都要寫相應的方法,致使不少重複的代碼。
正是金九銀十跳槽季,爲你們收集了2019年最新的面試資料,有文檔、有攻略、有視頻。有須要的同窗能夠在公衆號【Java知己】,發送【面試】領取最新面試資料攻略!暗號【1024】千萬不要發,不然.....
做爲一個有上進心的,有追求的程序員,這種方案感受很變扭,要想個方法解決。忽然想到了 JAVA 的設計模式,是否是能夠用這個解決啊,咱們來看看。
還好咱們的小夥伴們知道一點設計模式,那用策略模式進行改造吧
定義一個接口,用來進行過濾的接口,咱們能夠實現這個接口,去完成不一樣的需求,如:
上面定義了兩種查詢條件,都是實現了 StudentPredicate 接口,那咱們再看看主方法
上面的核心代碼就是 p.test(stu);這個就是查詢條件邏輯實現方法;要查詢某個業務,只須要把相關業務的接口實現傳給這個主方法就好了。
上面的方式代碼相對比較優美,若有別的查詢需求,只要實現 StudentPredicate 接口就好了。但這點也是個缺點,每一個需求都要去寫相關的接口實現。
爲了解決接口實現太多,能夠採用匿名類去解決,再來優化一下
這種方式大大的減小了接口實現類,須要什麼業務需求,直接在調用方法的時候創建匿名類去實現就好了。匿名類的方式,咱們的大佬以爲仍是不夠簡潔,因此 Java8 中新增了 Lambda 表達式,咱們看看。
咱們來看看 Lambda 表達式的實現
小夥伴們看看,是否是很簡潔。
每一個技術的出現確定是爲了解決一些問題的,小夥伴們在學習的時候,必定要知道爲何,解決什麼問題,這樣會對咱們瞭解這個技術點更深刻,下一篇老顧再來講說 Lambda 表達式的具體用法,謝謝!!!
「不積跬步,無以致千里」,但願將來的你能:有夢爲馬 隨處可棲!加油,少年!
關注公衆號:「Java 知己」,天天更新 Java 知識哦,期待你的到來!