'為什麼會出現Lambda表達式,你知道嗎?'

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 案例
  3. 改造
  4. 策略模式
  5. 匿名類
  6. Lambda表達式
  7. 總結

前言

Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?

案例

班導想了解一下各個同學的相關情況:

1、來自蘇州的有哪些同學

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 案例
  3. 改造
  4. 策略模式
  5. 匿名類
  6. Lambda表達式
  7. 總結

前言

Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?

案例

班導想了解一下各個同學的相關情況:

1、來自蘇州的有哪些同學

為什麼會出現Lambda表達式,你知道嗎?

上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。

班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。

2、地區參數化

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 案例
  3. 改造
  4. 策略模式
  5. 匿名類
  6. Lambda表達式
  7. 總結

前言

Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?

案例

班導想了解一下各個同學的相關情況:

1、來自蘇州的有哪些同學

為什麼會出現Lambda表達式,你知道嗎?

上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。

班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。

2、地區參數化

為什麼會出現Lambda表達式,你知道嗎?

這樣是不是就解決了,所有地區的查詢問題,把地區作為一個參數

問題好像得到了解決,突然班導又要知道同學們的年齡分佈。

3、可以查出20歲以上的學生

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 案例
  3. 改造
  4. 策略模式
  5. 匿名類
  6. Lambda表達式
  7. 總結

前言

Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?

案例

班導想了解一下各個同學的相關情況:

1、來自蘇州的有哪些同學

為什麼會出現Lambda表達式,你知道嗎?

上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。

班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。

2、地區參數化

為什麼會出現Lambda表達式,你知道嗎?

這樣是不是就解決了,所有地區的查詢問題,把地區作為一個參數

問題好像得到了解決,突然班導又要知道同學們的年齡分佈。

3、可以查出20歲以上的學生

為什麼會出現Lambda表達式,你知道嗎?

這一次直接到位,把年齡參數化

我們發現因為班導的兩個需求,根據地區和年齡查找學生,我們程序員提供了兩個方法,filterStudentByArea和filterStudentByAge。

我們小夥伴們有沒有發現,此兩個方法裡面的代碼是不是很像,有很多重複的代碼。不過滿足需求就行了,還能接受是吧。

改造

因為上面是兩個方法,很多小夥伴會想到可以改成一個方法,用flag標記查詢的業務。

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 案例
  3. 改造
  4. 策略模式
  5. 匿名類
  6. Lambda表達式
  7. 總結

前言

Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?

案例

班導想了解一下各個同學的相關情況:

1、來自蘇州的有哪些同學

為什麼會出現Lambda表達式,你知道嗎?

上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。

班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。

2、地區參數化

為什麼會出現Lambda表達式,你知道嗎?

這樣是不是就解決了,所有地區的查詢問題,把地區作為一個參數

問題好像得到了解決,突然班導又要知道同學們的年齡分佈。

3、可以查出20歲以上的學生

為什麼會出現Lambda表達式,你知道嗎?

這一次直接到位,把年齡參數化

我們發現因為班導的兩個需求,根據地區和年齡查找學生,我們程序員提供了兩個方法,filterStudentByArea和filterStudentByAge。

我們小夥伴們有沒有發現,此兩個方法裡面的代碼是不是很像,有很多重複的代碼。不過滿足需求就行了,還能接受是吧。

改造

因為上面是兩個方法,很多小夥伴會想到可以改成一個方法,用flag標記查詢的業務。

為什麼會出現Lambda表達式,你知道嗎?

改為一個方法,flag為true 表示根據年齡範圍查找學生;flag為false,表示查地區裡面的學生

調用方式

List<Student> areaStudentList = filterStudent(students,"蘇州",0,false);
List<Student> ageStudentList = filterStudent(students,"",20,true);

雖然改造了一個方法,但實現方式比較噁心。

小夥伴們會說那就不要優化了,兩個方法就兩個唄。其實如果需求不變了,這樣也是沒問題的,但如果班導又提出要根據學生成績進行查詢,或又要根據學生的體重、身高等;每增加一個維度都要寫相應的方法,導致很多重複的代碼

作為一個有上進心的,有追求的程序員,這種方案感覺很變扭,要想個方法解決。突然想到了JAVA的設計模式,是不是可以用這個解決啊,我們來看看。

策略模式

還好我們的小夥伴們知道一點設計模式,那用策略模式進行改造吧

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 案例
  3. 改造
  4. 策略模式
  5. 匿名類
  6. Lambda表達式
  7. 總結

前言

Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?

案例

班導想了解一下各個同學的相關情況:

1、來自蘇州的有哪些同學

為什麼會出現Lambda表達式,你知道嗎?

上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。

班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。

2、地區參數化

為什麼會出現Lambda表達式,你知道嗎?

這樣是不是就解決了,所有地區的查詢問題,把地區作為一個參數

問題好像得到了解決,突然班導又要知道同學們的年齡分佈。

3、可以查出20歲以上的學生

為什麼會出現Lambda表達式,你知道嗎?

這一次直接到位,把年齡參數化

我們發現因為班導的兩個需求,根據地區和年齡查找學生,我們程序員提供了兩個方法,filterStudentByArea和filterStudentByAge。

我們小夥伴們有沒有發現,此兩個方法裡面的代碼是不是很像,有很多重複的代碼。不過滿足需求就行了,還能接受是吧。

改造

因為上面是兩個方法,很多小夥伴會想到可以改成一個方法,用flag標記查詢的業務。

為什麼會出現Lambda表達式,你知道嗎?

改為一個方法,flag為true 表示根據年齡範圍查找學生;flag為false,表示查地區裡面的學生

調用方式

List<Student> areaStudentList = filterStudent(students,"蘇州",0,false);
List<Student> ageStudentList = filterStudent(students,"",20,true);

雖然改造了一個方法,但實現方式比較噁心。

小夥伴們會說那就不要優化了,兩個方法就兩個唄。其實如果需求不變了,這樣也是沒問題的,但如果班導又提出要根據學生成績進行查詢,或又要根據學生的體重、身高等;每增加一個維度都要寫相應的方法,導致很多重複的代碼

作為一個有上進心的,有追求的程序員,這種方案感覺很變扭,要想個方法解決。突然想到了JAVA的設計模式,是不是可以用這個解決啊,我們來看看。

策略模式

還好我們的小夥伴們知道一點設計模式,那用策略模式進行改造吧

為什麼會出現Lambda表達式,你知道嗎?

定義一個接口,用來進行過濾的接口,我們可以實現這個接口,去完成不同的需求,如:

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 案例
  3. 改造
  4. 策略模式
  5. 匿名類
  6. Lambda表達式
  7. 總結

前言

Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?

案例

班導想了解一下各個同學的相關情況:

1、來自蘇州的有哪些同學

為什麼會出現Lambda表達式,你知道嗎?

上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。

班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。

2、地區參數化

為什麼會出現Lambda表達式,你知道嗎?

這樣是不是就解決了,所有地區的查詢問題,把地區作為一個參數

問題好像得到了解決,突然班導又要知道同學們的年齡分佈。

3、可以查出20歲以上的學生

為什麼會出現Lambda表達式,你知道嗎?

這一次直接到位,把年齡參數化

我們發現因為班導的兩個需求,根據地區和年齡查找學生,我們程序員提供了兩個方法,filterStudentByArea和filterStudentByAge。

我們小夥伴們有沒有發現,此兩個方法裡面的代碼是不是很像,有很多重複的代碼。不過滿足需求就行了,還能接受是吧。

改造

因為上面是兩個方法,很多小夥伴會想到可以改成一個方法,用flag標記查詢的業務。

為什麼會出現Lambda表達式,你知道嗎?

改為一個方法,flag為true 表示根據年齡範圍查找學生;flag為false,表示查地區裡面的學生

調用方式

List<Student> areaStudentList = filterStudent(students,"蘇州",0,false);
List<Student> ageStudentList = filterStudent(students,"",20,true);

雖然改造了一個方法,但實現方式比較噁心。

小夥伴們會說那就不要優化了,兩個方法就兩個唄。其實如果需求不變了,這樣也是沒問題的,但如果班導又提出要根據學生成績進行查詢,或又要根據學生的體重、身高等;每增加一個維度都要寫相應的方法,導致很多重複的代碼

作為一個有上進心的,有追求的程序員,這種方案感覺很變扭,要想個方法解決。突然想到了JAVA的設計模式,是不是可以用這個解決啊,我們來看看。

策略模式

還好我們的小夥伴們知道一點設計模式,那用策略模式進行改造吧

為什麼會出現Lambda表達式,你知道嗎?

定義一個接口,用來進行過濾的接口,我們可以實現這個接口,去完成不同的需求,如:

為什麼會出現Lambda表達式,你知道嗎?

上面定義了兩種查詢條件,都是實現了StudentPredicate接口,那我們再看看主方法

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 案例
  3. 改造
  4. 策略模式
  5. 匿名類
  6. Lambda表達式
  7. 總結

前言

Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?

案例

班導想了解一下各個同學的相關情況:

1、來自蘇州的有哪些同學

為什麼會出現Lambda表達式,你知道嗎?

上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。

班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。

2、地區參數化

為什麼會出現Lambda表達式,你知道嗎?

這樣是不是就解決了,所有地區的查詢問題,把地區作為一個參數

問題好像得到了解決,突然班導又要知道同學們的年齡分佈。

3、可以查出20歲以上的學生

為什麼會出現Lambda表達式,你知道嗎?

這一次直接到位,把年齡參數化

我們發現因為班導的兩個需求,根據地區和年齡查找學生,我們程序員提供了兩個方法,filterStudentByArea和filterStudentByAge。

我們小夥伴們有沒有發現,此兩個方法裡面的代碼是不是很像,有很多重複的代碼。不過滿足需求就行了,還能接受是吧。

改造

因為上面是兩個方法,很多小夥伴會想到可以改成一個方法,用flag標記查詢的業務。

為什麼會出現Lambda表達式,你知道嗎?

改為一個方法,flag為true 表示根據年齡範圍查找學生;flag為false,表示查地區裡面的學生

調用方式

List<Student> areaStudentList = filterStudent(students,"蘇州",0,false);
List<Student> ageStudentList = filterStudent(students,"",20,true);

雖然改造了一個方法,但實現方式比較噁心。

小夥伴們會說那就不要優化了,兩個方法就兩個唄。其實如果需求不變了,這樣也是沒問題的,但如果班導又提出要根據學生成績進行查詢,或又要根據學生的體重、身高等;每增加一個維度都要寫相應的方法,導致很多重複的代碼

作為一個有上進心的,有追求的程序員,這種方案感覺很變扭,要想個方法解決。突然想到了JAVA的設計模式,是不是可以用這個解決啊,我們來看看。

策略模式

還好我們的小夥伴們知道一點設計模式,那用策略模式進行改造吧

為什麼會出現Lambda表達式,你知道嗎?

定義一個接口,用來進行過濾的接口,我們可以實現這個接口,去完成不同的需求,如:

為什麼會出現Lambda表達式,你知道嗎?

上面定義了兩種查詢條件,都是實現了StudentPredicate接口,那我們再看看主方法

為什麼會出現Lambda表達式,你知道嗎?

上面的核心代碼就是p.test(stu);這個就是查詢條件邏輯實現方法;要查詢某個業務,只需要把相關業務的接口實現傳給這個主方法就行了

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 案例
  3. 改造
  4. 策略模式
  5. 匿名類
  6. Lambda表達式
  7. 總結

前言

Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?

案例

班導想了解一下各個同學的相關情況:

1、來自蘇州的有哪些同學

為什麼會出現Lambda表達式,你知道嗎?

上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。

班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。

2、地區參數化

為什麼會出現Lambda表達式,你知道嗎?

這樣是不是就解決了,所有地區的查詢問題,把地區作為一個參數

問題好像得到了解決,突然班導又要知道同學們的年齡分佈。

3、可以查出20歲以上的學生

為什麼會出現Lambda表達式,你知道嗎?

這一次直接到位,把年齡參數化

我們發現因為班導的兩個需求,根據地區和年齡查找學生,我們程序員提供了兩個方法,filterStudentByArea和filterStudentByAge。

我們小夥伴們有沒有發現,此兩個方法裡面的代碼是不是很像,有很多重複的代碼。不過滿足需求就行了,還能接受是吧。

改造

因為上面是兩個方法,很多小夥伴會想到可以改成一個方法,用flag標記查詢的業務。

為什麼會出現Lambda表達式,你知道嗎?

改為一個方法,flag為true 表示根據年齡範圍查找學生;flag為false,表示查地區裡面的學生

調用方式

List<Student> areaStudentList = filterStudent(students,"蘇州",0,false);
List<Student> ageStudentList = filterStudent(students,"",20,true);

雖然改造了一個方法,但實現方式比較噁心。

小夥伴們會說那就不要優化了,兩個方法就兩個唄。其實如果需求不變了,這樣也是沒問題的,但如果班導又提出要根據學生成績進行查詢,或又要根據學生的體重、身高等;每增加一個維度都要寫相應的方法,導致很多重複的代碼

作為一個有上進心的,有追求的程序員,這種方案感覺很變扭,要想個方法解決。突然想到了JAVA的設計模式,是不是可以用這個解決啊,我們來看看。

策略模式

還好我們的小夥伴們知道一點設計模式,那用策略模式進行改造吧

為什麼會出現Lambda表達式,你知道嗎?

定義一個接口,用來進行過濾的接口,我們可以實現這個接口,去完成不同的需求,如:

為什麼會出現Lambda表達式,你知道嗎?

上面定義了兩種查詢條件,都是實現了StudentPredicate接口,那我們再看看主方法

為什麼會出現Lambda表達式,你知道嗎?

上面的核心代碼就是p.test(stu);這個就是查詢條件邏輯實現方法;要查詢某個業務,只需要把相關業務的接口實現傳給這個主方法就行了

為什麼會出現Lambda表達式,你知道嗎?

上面的方式代碼相對比較優美,如有別的查詢需求,只要實現StudentPredicate接口就行了。但這點也是個缺點,每個需求都要去寫相關的接口實現。

匿名類

為了解決接口實現太多,可以採用匿名類去解決,再來優化一下

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 案例
  3. 改造
  4. 策略模式
  5. 匿名類
  6. Lambda表達式
  7. 總結

前言

Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?

案例

班導想了解一下各個同學的相關情況:

1、來自蘇州的有哪些同學

為什麼會出現Lambda表達式,你知道嗎?

上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。

班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。

2、地區參數化

為什麼會出現Lambda表達式,你知道嗎?

這樣是不是就解決了,所有地區的查詢問題,把地區作為一個參數

問題好像得到了解決,突然班導又要知道同學們的年齡分佈。

3、可以查出20歲以上的學生

為什麼會出現Lambda表達式,你知道嗎?

這一次直接到位,把年齡參數化

我們發現因為班導的兩個需求,根據地區和年齡查找學生,我們程序員提供了兩個方法,filterStudentByArea和filterStudentByAge。

我們小夥伴們有沒有發現,此兩個方法裡面的代碼是不是很像,有很多重複的代碼。不過滿足需求就行了,還能接受是吧。

改造

因為上面是兩個方法,很多小夥伴會想到可以改成一個方法,用flag標記查詢的業務。

為什麼會出現Lambda表達式,你知道嗎?

改為一個方法,flag為true 表示根據年齡範圍查找學生;flag為false,表示查地區裡面的學生

調用方式

List<Student> areaStudentList = filterStudent(students,"蘇州",0,false);
List<Student> ageStudentList = filterStudent(students,"",20,true);

雖然改造了一個方法,但實現方式比較噁心。

小夥伴們會說那就不要優化了,兩個方法就兩個唄。其實如果需求不變了,這樣也是沒問題的,但如果班導又提出要根據學生成績進行查詢,或又要根據學生的體重、身高等;每增加一個維度都要寫相應的方法,導致很多重複的代碼

作為一個有上進心的,有追求的程序員,這種方案感覺很變扭,要想個方法解決。突然想到了JAVA的設計模式,是不是可以用這個解決啊,我們來看看。

策略模式

還好我們的小夥伴們知道一點設計模式,那用策略模式進行改造吧

為什麼會出現Lambda表達式,你知道嗎?

定義一個接口,用來進行過濾的接口,我們可以實現這個接口,去完成不同的需求,如:

為什麼會出現Lambda表達式,你知道嗎?

上面定義了兩種查詢條件,都是實現了StudentPredicate接口,那我們再看看主方法

為什麼會出現Lambda表達式,你知道嗎?

上面的核心代碼就是p.test(stu);這個就是查詢條件邏輯實現方法;要查詢某個業務,只需要把相關業務的接口實現傳給這個主方法就行了

為什麼會出現Lambda表達式,你知道嗎?

上面的方式代碼相對比較優美,如有別的查詢需求,只要實現StudentPredicate接口就行了。但這點也是個缺點,每個需求都要去寫相關的接口實現。

匿名類

為了解決接口實現太多,可以採用匿名類去解決,再來優化一下

為什麼會出現Lambda表達式,你知道嗎?

這種方式大大的減少了接口實現類,需要什麼業務需求,直接在調用方法的時候建立匿名類去實現就行了

匿名類的方式,我們的大佬覺得還是不夠簡潔,所以Java8中新增了Lambda表達式,我們看看。

Lambda表達式

我們來看看Lambda表達式的實現

"

歡迎關注頭條號:老顧聊技術

精品原創技術分享,知識的組裝工


目錄

  1. 前言
  2. 案例
  3. 改造
  4. 策略模式
  5. 匿名類
  6. Lambda表達式
  7. 總結

前言

Java8有一些新的特性,今天老顧給大家分享一下關於Lambda表達式的由來,一開始感覺Lambda可讀性蠻差的,不知道為什麼Java8會出來這個表達式?既然大佬們推出來,肯定是有原因的,應該是為了解決一些問題,那我們就看看解決了什麼問題?

案例

班導想了解一下各個同學的相關情況:

1、來自蘇州的有哪些同學

為什麼會出現Lambda表達式,你知道嗎?

上面的偽代碼,是不是很簡單,寫一個方法,直接過濾出蘇州地區的學生。

班導又想知道來自北京的有哪些同學,那代碼執行優化一下,可以動態傳地區參數。

2、地區參數化

為什麼會出現Lambda表達式,你知道嗎?

這樣是不是就解決了,所有地區的查詢問題,把地區作為一個參數

問題好像得到了解決,突然班導又要知道同學們的年齡分佈。

3、可以查出20歲以上的學生

為什麼會出現Lambda表達式,你知道嗎?

這一次直接到位,把年齡參數化

我們發現因為班導的兩個需求,根據地區和年齡查找學生,我們程序員提供了兩個方法,filterStudentByArea和filterStudentByAge。

我們小夥伴們有沒有發現,此兩個方法裡面的代碼是不是很像,有很多重複的代碼。不過滿足需求就行了,還能接受是吧。

改造

因為上面是兩個方法,很多小夥伴會想到可以改成一個方法,用flag標記查詢的業務。

為什麼會出現Lambda表達式,你知道嗎?

改為一個方法,flag為true 表示根據年齡範圍查找學生;flag為false,表示查地區裡面的學生

調用方式

List<Student> areaStudentList = filterStudent(students,"蘇州",0,false);
List<Student> ageStudentList = filterStudent(students,"",20,true);

雖然改造了一個方法,但實現方式比較噁心。

小夥伴們會說那就不要優化了,兩個方法就兩個唄。其實如果需求不變了,這樣也是沒問題的,但如果班導又提出要根據學生成績進行查詢,或又要根據學生的體重、身高等;每增加一個維度都要寫相應的方法,導致很多重複的代碼

作為一個有上進心的,有追求的程序員,這種方案感覺很變扭,要想個方法解決。突然想到了JAVA的設計模式,是不是可以用這個解決啊,我們來看看。

策略模式

還好我們的小夥伴們知道一點設計模式,那用策略模式進行改造吧

為什麼會出現Lambda表達式,你知道嗎?

定義一個接口,用來進行過濾的接口,我們可以實現這個接口,去完成不同的需求,如:

為什麼會出現Lambda表達式,你知道嗎?

上面定義了兩種查詢條件,都是實現了StudentPredicate接口,那我們再看看主方法

為什麼會出現Lambda表達式,你知道嗎?

上面的核心代碼就是p.test(stu);這個就是查詢條件邏輯實現方法;要查詢某個業務,只需要把相關業務的接口實現傳給這個主方法就行了

為什麼會出現Lambda表達式,你知道嗎?

上面的方式代碼相對比較優美,如有別的查詢需求,只要實現StudentPredicate接口就行了。但這點也是個缺點,每個需求都要去寫相關的接口實現。

匿名類

為了解決接口實現太多,可以採用匿名類去解決,再來優化一下

為什麼會出現Lambda表達式,你知道嗎?

這種方式大大的減少了接口實現類,需要什麼業務需求,直接在調用方法的時候建立匿名類去實現就行了

匿名類的方式,我們的大佬覺得還是不夠簡潔,所以Java8中新增了Lambda表達式,我們看看。

Lambda表達式

我們來看看Lambda表達式的實現

為什麼會出現Lambda表達式,你知道嗎?

小夥伴們看看,是不是很簡潔。

總結

每個技術的出現肯定是為了解決一些問題的,小夥伴們在學習的時候,一定要知道為什麼,解決什麼問題,這樣會對我們瞭解這個技術點更深入,下一篇老顧再來說說Lambda表達式的具體用法,謝謝!!!


-End-

推薦閱讀

1、不說“分佈式事務”理論,直接上大廠阿里的解決方案,絕對實用

2、女程序員問到這個問題,讓我思考了半天,Mysql的“三高”架構

3、大廠二面:CAP原則為什麼只能滿足其中兩項?而不能同時滿足

4、阿里P7二面:聊聊零拷貝的原理

5、秒殺系統的核心點都在這裡,快來取

6、你瞭解如何利用token方式實現分佈式Session嗎?

7、Mysql索引結構演變,為什麼最終會是那個結構呢?讓你一看就懂

8、一場比賽涉及到的知識,用通俗易通的方式介紹併發協調

9、企業實戰Redis全方面思考,你思考了嗎?

10、面試題:Thread的start和run的區別

11、面試題:什麼是CAS?CAS的作用以及缺點

12、如何訪問redis中的海量數據?避免事故產生

13、如何解決Redis熱點問題?以及如何發現熱點?

14、如何設計API接口,實現統一格式返回?

15、你真的知道在生產環境下如何部署tomcat嗎?

16、分享一線互聯網大廠分佈式唯一ID設計 之 snowflake方案

17、分享大廠分佈式唯一ID設計方案,快來圍觀

18、你想了解一線大廠的分佈式唯一ID生成方案嗎?

19、你知道如何處理大數據量嗎?(數據拆分篇)

20、如何永不遷移數據和避免熱點? 根據服務器指標分配數據量(揭祕篇)

21、你知道怎麼分庫分表嗎?如何做到永不遷移數據和避免熱點嗎?

22、你瞭解大型網站的頁面靜態化嗎?

23、你知道如何更新緩存嗎?如何保證緩存和數據庫雙寫一致性?

24、你知道怎麼解決DB讀寫分離,導致數據不一致問題嗎?

25、DB讀寫分離情況下,如何解決緩存和數據庫不一致性問題?

26、你真的知道怎麼使用緩存嗎?

27、如何利用鎖,防止緩存擊穿?重構思想的重要性

28、海量訂單產生的業務高峰期,如何避免消息的重複消費?

29、你知道如何保障生產端100%消息投遞成功嗎?

30、微服務下的分佈式session該如何管理?

"

相關推薦

推薦中...