歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 案例
- 改造
- 策略模式
- 匿名類
- Lambda表達式
- 總結
前言
Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?
案例
班導想了解一下各個同學的相關情況:
1、來自蘇州的有哪些同學
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 案例
- 改造
- 策略模式
- 匿名類
- Lambda表達式
- 總結
前言
Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?
案例
班導想了解一下各個同學的相關情況:
1、來自蘇州的有哪些同學
上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。
班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。
2、地區參數化
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 案例
- 改造
- 策略模式
- 匿名類
- Lambda表達式
- 總結
前言
Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?
案例
班導想了解一下各個同學的相關情況:
1、來自蘇州的有哪些同學
上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。
班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。
2、地區參數化
這樣是不是就解決了,所有地區的查詢問題,把地區作為一個參數。
問題好像得到了解決,突然班導又要知道同學們的年齡分佈。
3、可以查出20歲以上的學生
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 案例
- 改造
- 策略模式
- 匿名類
- Lambda表達式
- 總結
前言
Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?
案例
班導想了解一下各個同學的相關情況:
1、來自蘇州的有哪些同學
上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。
班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。
2、地區參數化
這樣是不是就解決了,所有地區的查詢問題,把地區作為一個參數。
問題好像得到了解決,突然班導又要知道同學們的年齡分佈。
3、可以查出20歲以上的學生
這一次直接到位,把年齡參數化。
我們發現因為班導的兩個需求,根據地區和年齡查找學生,我們程序員提供了兩個方法,filterStudentByArea和filterStudentByAge。
我們小夥伴們有沒有發現,此兩個方法裡面的代碼是不是很像,有很多重複的代碼。不過滿足需求就行了,還能接受是吧。
改造
因為上面是兩個方法,很多小夥伴會想到可以改成一個方法,用flag標記查詢的業務。
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 案例
- 改造
- 策略模式
- 匿名類
- Lambda表達式
- 總結
前言
Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?
案例
班導想了解一下各個同學的相關情況:
1、來自蘇州的有哪些同學
上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。
班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。
2、地區參數化
這樣是不是就解決了,所有地區的查詢問題,把地區作為一個參數。
問題好像得到了解決,突然班導又要知道同學們的年齡分佈。
3、可以查出20歲以上的學生
這一次直接到位,把年齡參數化。
我們發現因為班導的兩個需求,根據地區和年齡查找學生,我們程序員提供了兩個方法,filterStudentByArea和filterStudentByAge。
我們小夥伴們有沒有發現,此兩個方法裡面的代碼是不是很像,有很多重複的代碼。不過滿足需求就行了,還能接受是吧。
改造
因為上面是兩個方法,很多小夥伴會想到可以改成一個方法,用flag標記查詢的業務。
改為一個方法,flag為true 表示根據年齡範圍查找學生;flag為false,表示查地區裡面的學生
調用方式
List<Student> areaStudentList = filterStudent(students,"蘇州",0,false);
List<Student> ageStudentList = filterStudent(students,"",20,true);
雖然改造了一個方法,但實現方式比較噁心。
小夥伴們會說那就不要優化了,兩個方法就兩個唄。其實如果需求不變了,這樣也是沒問題的,但如果班導又提出要根據學生成績進行查詢,或又要根據學生的體重、身高等;每增加一個維度都要寫相應的方法,導致很多重複的代碼。
作為一個有上進心的,有追求的程序員,這種方案感覺很變扭,要想個方法解決。突然想到了JAVA的設計模式,是不是可以用這個解決啊,我們來看看。
策略模式
還好我們的小夥伴們知道一點設計模式,那用策略模式進行改造吧
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 案例
- 改造
- 策略模式
- 匿名類
- Lambda表達式
- 總結
前言
Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?
案例
班導想了解一下各個同學的相關情況:
1、來自蘇州的有哪些同學
上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。
班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。
2、地區參數化
這樣是不是就解決了,所有地區的查詢問題,把地區作為一個參數。
問題好像得到了解決,突然班導又要知道同學們的年齡分佈。
3、可以查出20歲以上的學生
這一次直接到位,把年齡參數化。
我們發現因為班導的兩個需求,根據地區和年齡查找學生,我們程序員提供了兩個方法,filterStudentByArea和filterStudentByAge。
我們小夥伴們有沒有發現,此兩個方法裡面的代碼是不是很像,有很多重複的代碼。不過滿足需求就行了,還能接受是吧。
改造
因為上面是兩個方法,很多小夥伴會想到可以改成一個方法,用flag標記查詢的業務。
改為一個方法,flag為true 表示根據年齡範圍查找學生;flag為false,表示查地區裡面的學生
調用方式
List<Student> areaStudentList = filterStudent(students,"蘇州",0,false);
List<Student> ageStudentList = filterStudent(students,"",20,true);
雖然改造了一個方法,但實現方式比較噁心。
小夥伴們會說那就不要優化了,兩個方法就兩個唄。其實如果需求不變了,這樣也是沒問題的,但如果班導又提出要根據學生成績進行查詢,或又要根據學生的體重、身高等;每增加一個維度都要寫相應的方法,導致很多重複的代碼。
作為一個有上進心的,有追求的程序員,這種方案感覺很變扭,要想個方法解決。突然想到了JAVA的設計模式,是不是可以用這個解決啊,我們來看看。
策略模式
還好我們的小夥伴們知道一點設計模式,那用策略模式進行改造吧
定義一個接口,用來進行過濾的接口,我們可以實現這個接口,去完成不同的需求,如:
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 案例
- 改造
- 策略模式
- 匿名類
- Lambda表達式
- 總結
前言
Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?
案例
班導想了解一下各個同學的相關情況:
1、來自蘇州的有哪些同學
上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。
班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。
2、地區參數化
這樣是不是就解決了,所有地區的查詢問題,把地區作為一個參數。
問題好像得到了解決,突然班導又要知道同學們的年齡分佈。
3、可以查出20歲以上的學生
這一次直接到位,把年齡參數化。
我們發現因為班導的兩個需求,根據地區和年齡查找學生,我們程序員提供了兩個方法,filterStudentByArea和filterStudentByAge。
我們小夥伴們有沒有發現,此兩個方法裡面的代碼是不是很像,有很多重複的代碼。不過滿足需求就行了,還能接受是吧。
改造
因為上面是兩個方法,很多小夥伴會想到可以改成一個方法,用flag標記查詢的業務。
改為一個方法,flag為true 表示根據年齡範圍查找學生;flag為false,表示查地區裡面的學生
調用方式
List<Student> areaStudentList = filterStudent(students,"蘇州",0,false);
List<Student> ageStudentList = filterStudent(students,"",20,true);
雖然改造了一個方法,但實現方式比較噁心。
小夥伴們會說那就不要優化了,兩個方法就兩個唄。其實如果需求不變了,這樣也是沒問題的,但如果班導又提出要根據學生成績進行查詢,或又要根據學生的體重、身高等;每增加一個維度都要寫相應的方法,導致很多重複的代碼。
作為一個有上進心的,有追求的程序員,這種方案感覺很變扭,要想個方法解決。突然想到了JAVA的設計模式,是不是可以用這個解決啊,我們來看看。
策略模式
還好我們的小夥伴們知道一點設計模式,那用策略模式進行改造吧
定義一個接口,用來進行過濾的接口,我們可以實現這個接口,去完成不同的需求,如:
上面定義了兩種查詢條件,都是實現了StudentPredicate接口,那我們再看看主方法
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 案例
- 改造
- 策略模式
- 匿名類
- Lambda表達式
- 總結
前言
Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?
案例
班導想了解一下各個同學的相關情況:
1、來自蘇州的有哪些同學
上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。
班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。
2、地區參數化
這樣是不是就解決了,所有地區的查詢問題,把地區作為一個參數。
問題好像得到了解決,突然班導又要知道同學們的年齡分佈。
3、可以查出20歲以上的學生
這一次直接到位,把年齡參數化。
我們發現因為班導的兩個需求,根據地區和年齡查找學生,我們程序員提供了兩個方法,filterStudentByArea和filterStudentByAge。
我們小夥伴們有沒有發現,此兩個方法裡面的代碼是不是很像,有很多重複的代碼。不過滿足需求就行了,還能接受是吧。
改造
因為上面是兩個方法,很多小夥伴會想到可以改成一個方法,用flag標記查詢的業務。
改為一個方法,flag為true 表示根據年齡範圍查找學生;flag為false,表示查地區裡面的學生
調用方式
List<Student> areaStudentList = filterStudent(students,"蘇州",0,false);
List<Student> ageStudentList = filterStudent(students,"",20,true);
雖然改造了一個方法,但實現方式比較噁心。
小夥伴們會說那就不要優化了,兩個方法就兩個唄。其實如果需求不變了,這樣也是沒問題的,但如果班導又提出要根據學生成績進行查詢,或又要根據學生的體重、身高等;每增加一個維度都要寫相應的方法,導致很多重複的代碼。
作為一個有上進心的,有追求的程序員,這種方案感覺很變扭,要想個方法解決。突然想到了JAVA的設計模式,是不是可以用這個解決啊,我們來看看。
策略模式
還好我們的小夥伴們知道一點設計模式,那用策略模式進行改造吧
定義一個接口,用來進行過濾的接口,我們可以實現這個接口,去完成不同的需求,如:
上面定義了兩種查詢條件,都是實現了StudentPredicate接口,那我們再看看主方法
上面的核心代碼就是p.test(stu);這個就是查詢條件邏輯實現方法;要查詢某個業務,只需要把相關業務的接口實現傳給這個主方法就行了。
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 案例
- 改造
- 策略模式
- 匿名類
- Lambda表達式
- 總結
前言
Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?
案例
班導想了解一下各個同學的相關情況:
1、來自蘇州的有哪些同學
上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。
班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。
2、地區參數化
這樣是不是就解決了,所有地區的查詢問題,把地區作為一個參數。
問題好像得到了解決,突然班導又要知道同學們的年齡分佈。
3、可以查出20歲以上的學生
這一次直接到位,把年齡參數化。
我們發現因為班導的兩個需求,根據地區和年齡查找學生,我們程序員提供了兩個方法,filterStudentByArea和filterStudentByAge。
我們小夥伴們有沒有發現,此兩個方法裡面的代碼是不是很像,有很多重複的代碼。不過滿足需求就行了,還能接受是吧。
改造
因為上面是兩個方法,很多小夥伴會想到可以改成一個方法,用flag標記查詢的業務。
改為一個方法,flag為true 表示根據年齡範圍查找學生;flag為false,表示查地區裡面的學生
調用方式
List<Student> areaStudentList = filterStudent(students,"蘇州",0,false);
List<Student> ageStudentList = filterStudent(students,"",20,true);
雖然改造了一個方法,但實現方式比較噁心。
小夥伴們會說那就不要優化了,兩個方法就兩個唄。其實如果需求不變了,這樣也是沒問題的,但如果班導又提出要根據學生成績進行查詢,或又要根據學生的體重、身高等;每增加一個維度都要寫相應的方法,導致很多重複的代碼。
作為一個有上進心的,有追求的程序員,這種方案感覺很變扭,要想個方法解決。突然想到了JAVA的設計模式,是不是可以用這個解決啊,我們來看看。
策略模式
還好我們的小夥伴們知道一點設計模式,那用策略模式進行改造吧
定義一個接口,用來進行過濾的接口,我們可以實現這個接口,去完成不同的需求,如:
上面定義了兩種查詢條件,都是實現了StudentPredicate接口,那我們再看看主方法
上面的核心代碼就是p.test(stu);這個就是查詢條件邏輯實現方法;要查詢某個業務,只需要把相關業務的接口實現傳給這個主方法就行了。
上面的方式代碼相對比較優美,如有別的查詢需求,只要實現StudentPredicate接口就行了。但這點也是個缺點,每個需求都要去寫相關的接口實現。
匿名類
為了解決接口實現太多,可以採用匿名類去解決,再來優化一下
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 案例
- 改造
- 策略模式
- 匿名類
- Lambda表達式
- 總結
前言
Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?
案例
班導想了解一下各個同學的相關情況:
1、來自蘇州的有哪些同學
上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。
班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。
2、地區參數化
這樣是不是就解決了,所有地區的查詢問題,把地區作為一個參數。
問題好像得到了解決,突然班導又要知道同學們的年齡分佈。
3、可以查出20歲以上的學生
這一次直接到位,把年齡參數化。
我們發現因為班導的兩個需求,根據地區和年齡查找學生,我們程序員提供了兩個方法,filterStudentByArea和filterStudentByAge。
我們小夥伴們有沒有發現,此兩個方法裡面的代碼是不是很像,有很多重複的代碼。不過滿足需求就行了,還能接受是吧。
改造
因為上面是兩個方法,很多小夥伴會想到可以改成一個方法,用flag標記查詢的業務。
改為一個方法,flag為true 表示根據年齡範圍查找學生;flag為false,表示查地區裡面的學生
調用方式
List<Student> areaStudentList = filterStudent(students,"蘇州",0,false);
List<Student> ageStudentList = filterStudent(students,"",20,true);
雖然改造了一個方法,但實現方式比較噁心。
小夥伴們會說那就不要優化了,兩個方法就兩個唄。其實如果需求不變了,這樣也是沒問題的,但如果班導又提出要根據學生成績進行查詢,或又要根據學生的體重、身高等;每增加一個維度都要寫相應的方法,導致很多重複的代碼。
作為一個有上進心的,有追求的程序員,這種方案感覺很變扭,要想個方法解決。突然想到了JAVA的設計模式,是不是可以用這個解決啊,我們來看看。
策略模式
還好我們的小夥伴們知道一點設計模式,那用策略模式進行改造吧
定義一個接口,用來進行過濾的接口,我們可以實現這個接口,去完成不同的需求,如:
上面定義了兩種查詢條件,都是實現了StudentPredicate接口,那我們再看看主方法
上面的核心代碼就是p.test(stu);這個就是查詢條件邏輯實現方法;要查詢某個業務,只需要把相關業務的接口實現傳給這個主方法就行了。
上面的方式代碼相對比較優美,如有別的查詢需求,只要實現StudentPredicate接口就行了。但這點也是個缺點,每個需求都要去寫相關的接口實現。
匿名類
為了解決接口實現太多,可以採用匿名類去解決,再來優化一下
這種方式大大的減少了接口實現類,需要什麼業務需求,直接在調用方法的時候建立匿名類去實現就行了。
匿名類的方式,我們的大佬覺得還是不夠簡潔,所以Java8中新增了Lambda表達式,我們看看。
Lambda表達式
我們來看看Lambda表達式的實現
歡迎關注頭條號:老顧聊技術
精品原創技術分享,知識的組裝工
目錄
- 前言
- 案例
- 改造
- 策略模式
- 匿名類
- Lambda表達式
- 總結
前言
Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?
案例
班導想了解一下各個同學的相關情況:
1、來自蘇州的有哪些同學
上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。
班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。
2、地區參數化
這樣是不是就解決了,所有地區的查詢問題,把地區作為一個參數。
問題好像得到了解決,突然班導又要知道同學們的年齡分佈。
3、可以查出20歲以上的學生
這一次直接到位,把年齡參數化。
我們發現因為班導的兩個需求,根據地區和年齡查找學生,我們程序員提供了兩個方法,filterStudentByArea和filterStudentByAge。
我們小夥伴們有沒有發現,此兩個方法裡面的代碼是不是很像,有很多重複的代碼。不過滿足需求就行了,還能接受是吧。
改造
因為上面是兩個方法,很多小夥伴會想到可以改成一個方法,用flag標記查詢的業務。
改為一個方法,flag為true 表示根據年齡範圍查找學生;flag為false,表示查地區裡面的學生
調用方式
List<Student> areaStudentList = filterStudent(students,"蘇州",0,false);
List<Student> ageStudentList = filterStudent(students,"",20,true);
雖然改造了一個方法,但實現方式比較噁心。
小夥伴們會說那就不要優化了,兩個方法就兩個唄。其實如果需求不變了,這樣也是沒問題的,但如果班導又提出要根據學生成績進行查詢,或又要根據學生的體重、身高等;每增加一個維度都要寫相應的方法,導致很多重複的代碼。
作為一個有上進心的,有追求的程序員,這種方案感覺很變扭,要想個方法解決。突然想到了JAVA的設計模式,是不是可以用這個解決啊,我們來看看。
策略模式
還好我們的小夥伴們知道一點設計模式,那用策略模式進行改造吧
定義一個接口,用來進行過濾的接口,我們可以實現這個接口,去完成不同的需求,如:
上面定義了兩種查詢條件,都是實現了StudentPredicate接口,那我們再看看主方法
上面的核心代碼就是p.test(stu);這個就是查詢條件邏輯實現方法;要查詢某個業務,只需要把相關業務的接口實現傳給這個主方法就行了。
上面的方式代碼相對比較優美,如有別的查詢需求,只要實現StudentPredicate接口就行了。但這點也是個缺點,每個需求都要去寫相關的接口實現。
匿名類
為了解決接口實現太多,可以採用匿名類去解決,再來優化一下
這種方式大大的減少了接口實現類,需要什麼業務需求,直接在調用方法的時候建立匿名類去實現就行了。
匿名類的方式,我們的大佬覺得還是不夠簡潔,所以Java8中新增了Lambda表達式,我們看看。
Lambda表達式
我們來看看Lambda表達式的實現
小夥伴們看看,是不是很簡潔。
總結
每個技術的出現肯定是為了解決一些問題的,小夥伴們在學習的時候,一定要知道為什麼,解決什麼問題,這樣會對我們瞭解這個技術點更深入,下一篇老顧再來說說Lambda表達式的具體用法,謝謝!!!
-End-
推薦閱讀
1、不說“分佈式事務”理論,直接上大廠阿里的解決方案,絕對實用
2、女程序員問到這個問題,讓我思考了半天,Mysql的“三高”架構
3、大廠二面:CAP原則為什麼只能滿足其中兩項?而不能同時滿足
6、你瞭解如何利用token方式實現分佈式Session嗎?
7、Mysql索引結構演變,為什麼最終會是那個結構呢?讓你一看就懂
16、分享一線互聯網大廠分佈式唯一ID設計 之 snowflake方案
20、如何永不遷移數據和避免熱點? 根據服務器指標分配數據量(揭祕篇)
21、你知道怎麼分庫分表嗎?如何做到永不遷移數據和避免熱點嗎?
23、你知道如何更新緩存嗎?如何保證緩存和數據庫雙寫一致性?