'Java 8中Stream API的這些奇技!你都Get到了嗎?'

Java 數據結構 設計 泛函編程 程序員聖經 2019-08-19
"
作者:我是你的小眼睛兒
來源:https://www.jianshu.com/p/9fe8632d0bc2

Stream簡介

1、Java 8引入了全新的Stream API。這裡的Stream和I/O流不同,它更像具有Iterable的集合類,但行為和集合類又有所不同。

2、stream是對集合對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作,或者大批量數據操作。

3、只要給出需要對其包含的元素執行什麼操作,比如 “過濾掉長度大於 10 的字符串”、“獲取每個字符串的首字母”等,Stream 會隱式地在內部進行遍歷,做出相應的數據轉換。

為什麼要使用Stream

1、函數式編程帶來的好處尤為明顯。這種代碼更多地表達了業務邏輯的意圖,而不是它的實現機制。易讀的代碼也易於維護、更可靠、更不容易出錯。

2、高端

實例數據源


"
作者:我是你的小眼睛兒
來源:https://www.jianshu.com/p/9fe8632d0bc2

Stream簡介

1、Java 8引入了全新的Stream API。這裡的Stream和I/O流不同,它更像具有Iterable的集合類,但行為和集合類又有所不同。

2、stream是對集合對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作,或者大批量數據操作。

3、只要給出需要對其包含的元素執行什麼操作,比如 “過濾掉長度大於 10 的字符串”、“獲取每個字符串的首字母”等,Stream 會隱式地在內部進行遍歷,做出相應的數據轉換。

為什麼要使用Stream

1、函數式編程帶來的好處尤為明顯。這種代碼更多地表達了業務邏輯的意圖,而不是它的實現機制。易讀的代碼也易於維護、更可靠、更不容易出錯。

2、高端

實例數據源


Java 8中Stream API的這些奇技!你都Get到了嗎?


Filter

1、遍歷數據並檢查其中的元素時使用。

2、filter接受一個函數作為參數,該函數用Lambda表達式表示。

"
作者:我是你的小眼睛兒
來源:https://www.jianshu.com/p/9fe8632d0bc2

Stream簡介

1、Java 8引入了全新的Stream API。這裡的Stream和I/O流不同,它更像具有Iterable的集合類,但行為和集合類又有所不同。

2、stream是對集合對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作,或者大批量數據操作。

3、只要給出需要對其包含的元素執行什麼操作,比如 “過濾掉長度大於 10 的字符串”、“獲取每個字符串的首字母”等,Stream 會隱式地在內部進行遍歷,做出相應的數據轉換。

為什麼要使用Stream

1、函數式編程帶來的好處尤為明顯。這種代碼更多地表達了業務邏輯的意圖,而不是它的實現機制。易讀的代碼也易於維護、更可靠、更不容易出錯。

2、高端

實例數據源


Java 8中Stream API的這些奇技!你都Get到了嗎?


Filter

1、遍歷數據並檢查其中的元素時使用。

2、filter接受一個函數作為參數,該函數用Lambda表達式表示。

Java 8中Stream API的這些奇技!你都Get到了嗎?


"
作者:我是你的小眼睛兒
來源:https://www.jianshu.com/p/9fe8632d0bc2

Stream簡介

1、Java 8引入了全新的Stream API。這裡的Stream和I/O流不同,它更像具有Iterable的集合類,但行為和集合類又有所不同。

2、stream是對集合對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作,或者大批量數據操作。

3、只要給出需要對其包含的元素執行什麼操作,比如 “過濾掉長度大於 10 的字符串”、“獲取每個字符串的首字母”等,Stream 會隱式地在內部進行遍歷,做出相應的數據轉換。

為什麼要使用Stream

1、函數式編程帶來的好處尤為明顯。這種代碼更多地表達了業務邏輯的意圖,而不是它的實現機制。易讀的代碼也易於維護、更可靠、更不容易出錯。

2、高端

實例數據源


Java 8中Stream API的這些奇技!你都Get到了嗎?


Filter

1、遍歷數據並檢查其中的元素時使用。

2、filter接受一個函數作為參數,該函數用Lambda表達式表示。

Java 8中Stream API的這些奇技!你都Get到了嗎?


Java 8中Stream API的這些奇技!你都Get到了嗎?


Map

1、map生成的是個一對一映射,for的作用

2、比較常用

3、而且很簡單

"
作者:我是你的小眼睛兒
來源:https://www.jianshu.com/p/9fe8632d0bc2

Stream簡介

1、Java 8引入了全新的Stream API。這裡的Stream和I/O流不同,它更像具有Iterable的集合類,但行為和集合類又有所不同。

2、stream是對集合對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作,或者大批量數據操作。

3、只要給出需要對其包含的元素執行什麼操作,比如 “過濾掉長度大於 10 的字符串”、“獲取每個字符串的首字母”等,Stream 會隱式地在內部進行遍歷,做出相應的數據轉換。

為什麼要使用Stream

1、函數式編程帶來的好處尤為明顯。這種代碼更多地表達了業務邏輯的意圖,而不是它的實現機制。易讀的代碼也易於維護、更可靠、更不容易出錯。

2、高端

實例數據源


Java 8中Stream API的這些奇技!你都Get到了嗎?


Filter

1、遍歷數據並檢查其中的元素時使用。

2、filter接受一個函數作為參數,該函數用Lambda表達式表示。

Java 8中Stream API的這些奇技!你都Get到了嗎?


Java 8中Stream API的這些奇技!你都Get到了嗎?


Map

1、map生成的是個一對一映射,for的作用

2、比較常用

3、而且很簡單

Java 8中Stream API的這些奇技!你都Get到了嗎?



"
作者:我是你的小眼睛兒
來源:https://www.jianshu.com/p/9fe8632d0bc2

Stream簡介

1、Java 8引入了全新的Stream API。這裡的Stream和I/O流不同,它更像具有Iterable的集合類,但行為和集合類又有所不同。

2、stream是對集合對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作,或者大批量數據操作。

3、只要給出需要對其包含的元素執行什麼操作,比如 “過濾掉長度大於 10 的字符串”、“獲取每個字符串的首字母”等,Stream 會隱式地在內部進行遍歷,做出相應的數據轉換。

為什麼要使用Stream

1、函數式編程帶來的好處尤為明顯。這種代碼更多地表達了業務邏輯的意圖,而不是它的實現機制。易讀的代碼也易於維護、更可靠、更不容易出錯。

2、高端

實例數據源


Java 8中Stream API的這些奇技!你都Get到了嗎?


Filter

1、遍歷數據並檢查其中的元素時使用。

2、filter接受一個函數作為參數,該函數用Lambda表達式表示。

Java 8中Stream API的這些奇技!你都Get到了嗎?


Java 8中Stream API的這些奇技!你都Get到了嗎?


Map

1、map生成的是個一對一映射,for的作用

2、比較常用

3、而且很簡單

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


FlatMap

1、顧名思義,跟map差不多,更深層次的操作

2、但還是有區別的

3、map和flat返回值不同

4、Map 每個輸入元素,都按照規則轉換成為另外一個元素。

還有一些場景,是一對多映射關係的,這時需要 flatMap。

5、Map一對一

6、Flatmap一對多

7、map和flatMap的方法聲明是不一樣的

(1) <r> Stream<r> map(Function mapper);

(2) <r> Stream<r> flatMap(Function> mapper);

(3) map和flatMap的區別:我個人認為,flatMap的可以處理更深層次的數據,入參為多個list,結果可以返回為一個list,而map是一對一的,入參是多個list,結果返回必須是多個list。通俗的說,如果入參都是對象,那麼flatMap可以操作對象裡面的對象,而map只能操作第一層。

"
作者:我是你的小眼睛兒
來源:https://www.jianshu.com/p/9fe8632d0bc2

Stream簡介

1、Java 8引入了全新的Stream API。這裡的Stream和I/O流不同,它更像具有Iterable的集合類,但行為和集合類又有所不同。

2、stream是對集合對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作,或者大批量數據操作。

3、只要給出需要對其包含的元素執行什麼操作,比如 “過濾掉長度大於 10 的字符串”、“獲取每個字符串的首字母”等,Stream 會隱式地在內部進行遍歷,做出相應的數據轉換。

為什麼要使用Stream

1、函數式編程帶來的好處尤為明顯。這種代碼更多地表達了業務邏輯的意圖,而不是它的實現機制。易讀的代碼也易於維護、更可靠、更不容易出錯。

2、高端

實例數據源


Java 8中Stream API的這些奇技!你都Get到了嗎?


Filter

1、遍歷數據並檢查其中的元素時使用。

2、filter接受一個函數作為參數,該函數用Lambda表達式表示。

Java 8中Stream API的這些奇技!你都Get到了嗎?


Java 8中Stream API的這些奇技!你都Get到了嗎?


Map

1、map生成的是個一對一映射,for的作用

2、比較常用

3、而且很簡單

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


FlatMap

1、顧名思義,跟map差不多,更深層次的操作

2、但還是有區別的

3、map和flat返回值不同

4、Map 每個輸入元素,都按照規則轉換成為另外一個元素。

還有一些場景,是一對多映射關係的,這時需要 flatMap。

5、Map一對一

6、Flatmap一對多

7、map和flatMap的方法聲明是不一樣的

(1) <r> Stream<r> map(Function mapper);

(2) <r> Stream<r> flatMap(Function> mapper);

(3) map和flatMap的區別:我個人認為,flatMap的可以處理更深層次的數據,入參為多個list,結果可以返回為一個list,而map是一對一的,入參是多個list,結果返回必須是多個list。通俗的說,如果入參都是對象,那麼flatMap可以操作對象裡面的對象,而map只能操作第一層。

Java 8中Stream API的這些奇技!你都Get到了嗎?



"
作者:我是你的小眼睛兒
來源:https://www.jianshu.com/p/9fe8632d0bc2

Stream簡介

1、Java 8引入了全新的Stream API。這裡的Stream和I/O流不同,它更像具有Iterable的集合類,但行為和集合類又有所不同。

2、stream是對集合對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作,或者大批量數據操作。

3、只要給出需要對其包含的元素執行什麼操作,比如 “過濾掉長度大於 10 的字符串”、“獲取每個字符串的首字母”等,Stream 會隱式地在內部進行遍歷,做出相應的數據轉換。

為什麼要使用Stream

1、函數式編程帶來的好處尤為明顯。這種代碼更多地表達了業務邏輯的意圖,而不是它的實現機制。易讀的代碼也易於維護、更可靠、更不容易出錯。

2、高端

實例數據源


Java 8中Stream API的這些奇技!你都Get到了嗎?


Filter

1、遍歷數據並檢查其中的元素時使用。

2、filter接受一個函數作為參數,該函數用Lambda表達式表示。

Java 8中Stream API的這些奇技!你都Get到了嗎?


Java 8中Stream API的這些奇技!你都Get到了嗎?


Map

1、map生成的是個一對一映射,for的作用

2、比較常用

3、而且很簡單

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


FlatMap

1、顧名思義,跟map差不多,更深層次的操作

2、但還是有區別的

3、map和flat返回值不同

4、Map 每個輸入元素,都按照規則轉換成為另外一個元素。

還有一些場景,是一對多映射關係的,這時需要 flatMap。

5、Map一對一

6、Flatmap一對多

7、map和flatMap的方法聲明是不一樣的

(1) <r> Stream<r> map(Function mapper);

(2) <r> Stream<r> flatMap(Function> mapper);

(3) map和flatMap的區別:我個人認為,flatMap的可以處理更深層次的數據,入參為多個list,結果可以返回為一個list,而map是一對一的,入參是多個list,結果返回必須是多個list。通俗的說,如果入參都是對象,那麼flatMap可以操作對象裡面的對象,而map只能操作第一層。

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


Reduce

1、感覺類似遞歸

2、數字(字符串)累加

3、個人沒咋用過

"
作者:我是你的小眼睛兒
來源:https://www.jianshu.com/p/9fe8632d0bc2

Stream簡介

1、Java 8引入了全新的Stream API。這裡的Stream和I/O流不同,它更像具有Iterable的集合類,但行為和集合類又有所不同。

2、stream是對集合對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作,或者大批量數據操作。

3、只要給出需要對其包含的元素執行什麼操作,比如 “過濾掉長度大於 10 的字符串”、“獲取每個字符串的首字母”等,Stream 會隱式地在內部進行遍歷,做出相應的數據轉換。

為什麼要使用Stream

1、函數式編程帶來的好處尤為明顯。這種代碼更多地表達了業務邏輯的意圖,而不是它的實現機制。易讀的代碼也易於維護、更可靠、更不容易出錯。

2、高端

實例數據源


Java 8中Stream API的這些奇技!你都Get到了嗎?


Filter

1、遍歷數據並檢查其中的元素時使用。

2、filter接受一個函數作為參數,該函數用Lambda表達式表示。

Java 8中Stream API的這些奇技!你都Get到了嗎?


Java 8中Stream API的這些奇技!你都Get到了嗎?


Map

1、map生成的是個一對一映射,for的作用

2、比較常用

3、而且很簡單

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


FlatMap

1、顧名思義,跟map差不多,更深層次的操作

2、但還是有區別的

3、map和flat返回值不同

4、Map 每個輸入元素,都按照規則轉換成為另外一個元素。

還有一些場景,是一對多映射關係的,這時需要 flatMap。

5、Map一對一

6、Flatmap一對多

7、map和flatMap的方法聲明是不一樣的

(1) <r> Stream<r> map(Function mapper);

(2) <r> Stream<r> flatMap(Function> mapper);

(3) map和flatMap的區別:我個人認為,flatMap的可以處理更深層次的數據,入參為多個list,結果可以返回為一個list,而map是一對一的,入參是多個list,結果返回必須是多個list。通俗的說,如果入參都是對象,那麼flatMap可以操作對象裡面的對象,而map只能操作第一層。

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


Reduce

1、感覺類似遞歸

2、數字(字符串)累加

3、個人沒咋用過

Java 8中Stream API的這些奇技!你都Get到了嗎?



"
作者:我是你的小眼睛兒
來源:https://www.jianshu.com/p/9fe8632d0bc2

Stream簡介

1、Java 8引入了全新的Stream API。這裡的Stream和I/O流不同,它更像具有Iterable的集合類,但行為和集合類又有所不同。

2、stream是對集合對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作,或者大批量數據操作。

3、只要給出需要對其包含的元素執行什麼操作,比如 “過濾掉長度大於 10 的字符串”、“獲取每個字符串的首字母”等,Stream 會隱式地在內部進行遍歷,做出相應的數據轉換。

為什麼要使用Stream

1、函數式編程帶來的好處尤為明顯。這種代碼更多地表達了業務邏輯的意圖,而不是它的實現機制。易讀的代碼也易於維護、更可靠、更不容易出錯。

2、高端

實例數據源


Java 8中Stream API的這些奇技!你都Get到了嗎?


Filter

1、遍歷數據並檢查其中的元素時使用。

2、filter接受一個函數作為參數,該函數用Lambda表達式表示。

Java 8中Stream API的這些奇技!你都Get到了嗎?


Java 8中Stream API的這些奇技!你都Get到了嗎?


Map

1、map生成的是個一對一映射,for的作用

2、比較常用

3、而且很簡單

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


FlatMap

1、顧名思義,跟map差不多,更深層次的操作

2、但還是有區別的

3、map和flat返回值不同

4、Map 每個輸入元素,都按照規則轉換成為另外一個元素。

還有一些場景,是一對多映射關係的,這時需要 flatMap。

5、Map一對一

6、Flatmap一對多

7、map和flatMap的方法聲明是不一樣的

(1) <r> Stream<r> map(Function mapper);

(2) <r> Stream<r> flatMap(Function> mapper);

(3) map和flatMap的區別:我個人認為,flatMap的可以處理更深層次的數據,入參為多個list,結果可以返回為一個list,而map是一對一的,入參是多個list,結果返回必須是多個list。通俗的說,如果入參都是對象,那麼flatMap可以操作對象裡面的對象,而map只能操作第一層。

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


Reduce

1、感覺類似遞歸

2、數字(字符串)累加

3、個人沒咋用過

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


Collect

1、collect在流中生成列表,map,等常用的數據結構

2、toList()

3、toSet()

4、toMap()

5、自定義


"
作者:我是你的小眼睛兒
來源:https://www.jianshu.com/p/9fe8632d0bc2

Stream簡介

1、Java 8引入了全新的Stream API。這裡的Stream和I/O流不同,它更像具有Iterable的集合類,但行為和集合類又有所不同。

2、stream是對集合對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作,或者大批量數據操作。

3、只要給出需要對其包含的元素執行什麼操作,比如 “過濾掉長度大於 10 的字符串”、“獲取每個字符串的首字母”等,Stream 會隱式地在內部進行遍歷,做出相應的數據轉換。

為什麼要使用Stream

1、函數式編程帶來的好處尤為明顯。這種代碼更多地表達了業務邏輯的意圖,而不是它的實現機制。易讀的代碼也易於維護、更可靠、更不容易出錯。

2、高端

實例數據源


Java 8中Stream API的這些奇技!你都Get到了嗎?


Filter

1、遍歷數據並檢查其中的元素時使用。

2、filter接受一個函數作為參數,該函數用Lambda表達式表示。

Java 8中Stream API的這些奇技!你都Get到了嗎?


Java 8中Stream API的這些奇技!你都Get到了嗎?


Map

1、map生成的是個一對一映射,for的作用

2、比較常用

3、而且很簡單

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


FlatMap

1、顧名思義,跟map差不多,更深層次的操作

2、但還是有區別的

3、map和flat返回值不同

4、Map 每個輸入元素,都按照規則轉換成為另外一個元素。

還有一些場景,是一對多映射關係的,這時需要 flatMap。

5、Map一對一

6、Flatmap一對多

7、map和flatMap的方法聲明是不一樣的

(1) <r> Stream<r> map(Function mapper);

(2) <r> Stream<r> flatMap(Function> mapper);

(3) map和flatMap的區別:我個人認為,flatMap的可以處理更深層次的數據,入參為多個list,結果可以返回為一個list,而map是一對一的,入參是多個list,結果返回必須是多個list。通俗的說,如果入參都是對象,那麼flatMap可以操作對象裡面的對象,而map只能操作第一層。

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


Reduce

1、感覺類似遞歸

2、數字(字符串)累加

3、個人沒咋用過

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


Collect

1、collect在流中生成列表,map,等常用的數據結構

2、toList()

3、toSet()

4、toMap()

5、自定義


Java 8中Stream API的這些奇技!你都Get到了嗎?


Optional

1、Optional 是為核心類庫新設計的一個數據類型,用來替換 null 值。

2、人們對原有的 null 值有很多抱怨,甚至連發明這一概念的Tony Hoare也是如此,他曾說這是自己的一個“價值連城的錯誤”

3、用處很廣,不光在lambda中,哪都能用

4、Optional.of(T),T為非空,否則初始化報錯

5、Optional.ofNullable(T),T為任意,可以為空

6、isPresent(),相當於 !=null

7、ifPresent(T), T可以是一段lambda表達式 ,或者其他代碼,非空則執行


"
作者:我是你的小眼睛兒
來源:https://www.jianshu.com/p/9fe8632d0bc2

Stream簡介

1、Java 8引入了全新的Stream API。這裡的Stream和I/O流不同,它更像具有Iterable的集合類,但行為和集合類又有所不同。

2、stream是對集合對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作,或者大批量數據操作。

3、只要給出需要對其包含的元素執行什麼操作,比如 “過濾掉長度大於 10 的字符串”、“獲取每個字符串的首字母”等,Stream 會隱式地在內部進行遍歷,做出相應的數據轉換。

為什麼要使用Stream

1、函數式編程帶來的好處尤為明顯。這種代碼更多地表達了業務邏輯的意圖,而不是它的實現機制。易讀的代碼也易於維護、更可靠、更不容易出錯。

2、高端

實例數據源


Java 8中Stream API的這些奇技!你都Get到了嗎?


Filter

1、遍歷數據並檢查其中的元素時使用。

2、filter接受一個函數作為參數,該函數用Lambda表達式表示。

Java 8中Stream API的這些奇技!你都Get到了嗎?


Java 8中Stream API的這些奇技!你都Get到了嗎?


Map

1、map生成的是個一對一映射,for的作用

2、比較常用

3、而且很簡單

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


FlatMap

1、顧名思義,跟map差不多,更深層次的操作

2、但還是有區別的

3、map和flat返回值不同

4、Map 每個輸入元素,都按照規則轉換成為另外一個元素。

還有一些場景,是一對多映射關係的,這時需要 flatMap。

5、Map一對一

6、Flatmap一對多

7、map和flatMap的方法聲明是不一樣的

(1) <r> Stream<r> map(Function mapper);

(2) <r> Stream<r> flatMap(Function> mapper);

(3) map和flatMap的區別:我個人認為,flatMap的可以處理更深層次的數據,入參為多個list,結果可以返回為一個list,而map是一對一的,入參是多個list,結果返回必須是多個list。通俗的說,如果入參都是對象,那麼flatMap可以操作對象裡面的對象,而map只能操作第一層。

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


Reduce

1、感覺類似遞歸

2、數字(字符串)累加

3、個人沒咋用過

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


Collect

1、collect在流中生成列表,map,等常用的數據結構

2、toList()

3、toSet()

4、toMap()

5、自定義


Java 8中Stream API的這些奇技!你都Get到了嗎?


Optional

1、Optional 是為核心類庫新設計的一個數據類型,用來替換 null 值。

2、人們對原有的 null 值有很多抱怨,甚至連發明這一概念的Tony Hoare也是如此,他曾說這是自己的一個“價值連城的錯誤”

3、用處很廣,不光在lambda中,哪都能用

4、Optional.of(T),T為非空,否則初始化報錯

5、Optional.ofNullable(T),T為任意,可以為空

6、isPresent(),相當於 !=null

7、ifPresent(T), T可以是一段lambda表達式 ,或者其他代碼,非空則執行


Java 8中Stream API的這些奇技!你都Get到了嗎?


併發

1、stream替換成parallelStream或 parallel

2、輸入流的大小並不是決定並行化是否會帶來速度提升的唯一因素,性能還會受到編寫代碼的方式和核的數量的影響

3、影響性能的五要素是:數據大小、源數據結構、值是否裝箱、可用的CPU核數量,以及處理每個元素所花的時間


"
作者:我是你的小眼睛兒
來源:https://www.jianshu.com/p/9fe8632d0bc2

Stream簡介

1、Java 8引入了全新的Stream API。這裡的Stream和I/O流不同,它更像具有Iterable的集合類,但行為和集合類又有所不同。

2、stream是對集合對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作,或者大批量數據操作。

3、只要給出需要對其包含的元素執行什麼操作,比如 “過濾掉長度大於 10 的字符串”、“獲取每個字符串的首字母”等,Stream 會隱式地在內部進行遍歷,做出相應的數據轉換。

為什麼要使用Stream

1、函數式編程帶來的好處尤為明顯。這種代碼更多地表達了業務邏輯的意圖,而不是它的實現機制。易讀的代碼也易於維護、更可靠、更不容易出錯。

2、高端

實例數據源


Java 8中Stream API的這些奇技!你都Get到了嗎?


Filter

1、遍歷數據並檢查其中的元素時使用。

2、filter接受一個函數作為參數,該函數用Lambda表達式表示。

Java 8中Stream API的這些奇技!你都Get到了嗎?


Java 8中Stream API的這些奇技!你都Get到了嗎?


Map

1、map生成的是個一對一映射,for的作用

2、比較常用

3、而且很簡單

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


FlatMap

1、顧名思義,跟map差不多,更深層次的操作

2、但還是有區別的

3、map和flat返回值不同

4、Map 每個輸入元素,都按照規則轉換成為另外一個元素。

還有一些場景,是一對多映射關係的,這時需要 flatMap。

5、Map一對一

6、Flatmap一對多

7、map和flatMap的方法聲明是不一樣的

(1) <r> Stream<r> map(Function mapper);

(2) <r> Stream<r> flatMap(Function> mapper);

(3) map和flatMap的區別:我個人認為,flatMap的可以處理更深層次的數據,入參為多個list,結果可以返回為一個list,而map是一對一的,入參是多個list,結果返回必須是多個list。通俗的說,如果入參都是對象,那麼flatMap可以操作對象裡面的對象,而map只能操作第一層。

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


Reduce

1、感覺類似遞歸

2、數字(字符串)累加

3、個人沒咋用過

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


Collect

1、collect在流中生成列表,map,等常用的數據結構

2、toList()

3、toSet()

4、toMap()

5、自定義


Java 8中Stream API的這些奇技!你都Get到了嗎?


Optional

1、Optional 是為核心類庫新設計的一個數據類型,用來替換 null 值。

2、人們對原有的 null 值有很多抱怨,甚至連發明這一概念的Tony Hoare也是如此,他曾說這是自己的一個“價值連城的錯誤”

3、用處很廣,不光在lambda中,哪都能用

4、Optional.of(T),T為非空,否則初始化報錯

5、Optional.ofNullable(T),T為任意,可以為空

6、isPresent(),相當於 !=null

7、ifPresent(T), T可以是一段lambda表達式 ,或者其他代碼,非空則執行


Java 8中Stream API的這些奇技!你都Get到了嗎?


併發

1、stream替換成parallelStream或 parallel

2、輸入流的大小並不是決定並行化是否會帶來速度提升的唯一因素,性能還會受到編寫代碼的方式和核的數量的影響

3、影響性能的五要素是:數據大小、源數據結構、值是否裝箱、可用的CPU核數量,以及處理每個元素所花的時間


Java 8中Stream API的這些奇技!你都Get到了嗎?


調試

1、list.map.fiter.map.xx 為鏈式調用,最終調用collect(xx)返回結果

2、分惰性求值和及早求值

3、判斷一個操作是惰性求值還是及早求值很簡單:只需看它的返回值。如果返回值是 Stream,那麼是惰性求值;如果返回值是另一個值或為空,那麼就是及早求值。使用這些操作的理想方式就是形成一個惰性求值的鏈,最後用一個及早求值的操作返回想要的結果。

4、通過peek可以查看每個值,同時能繼續操作流


"
作者:我是你的小眼睛兒
來源:https://www.jianshu.com/p/9fe8632d0bc2

Stream簡介

1、Java 8引入了全新的Stream API。這裡的Stream和I/O流不同,它更像具有Iterable的集合類,但行為和集合類又有所不同。

2、stream是對集合對象功能的增強,它專注於對集合對象進行各種非常便利、高效的聚合操作,或者大批量數據操作。

3、只要給出需要對其包含的元素執行什麼操作,比如 “過濾掉長度大於 10 的字符串”、“獲取每個字符串的首字母”等,Stream 會隱式地在內部進行遍歷,做出相應的數據轉換。

為什麼要使用Stream

1、函數式編程帶來的好處尤為明顯。這種代碼更多地表達了業務邏輯的意圖,而不是它的實現機制。易讀的代碼也易於維護、更可靠、更不容易出錯。

2、高端

實例數據源


Java 8中Stream API的這些奇技!你都Get到了嗎?


Filter

1、遍歷數據並檢查其中的元素時使用。

2、filter接受一個函數作為參數,該函數用Lambda表達式表示。

Java 8中Stream API的這些奇技!你都Get到了嗎?


Java 8中Stream API的這些奇技!你都Get到了嗎?


Map

1、map生成的是個一對一映射,for的作用

2、比較常用

3、而且很簡單

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


FlatMap

1、顧名思義,跟map差不多,更深層次的操作

2、但還是有區別的

3、map和flat返回值不同

4、Map 每個輸入元素,都按照規則轉換成為另外一個元素。

還有一些場景,是一對多映射關係的,這時需要 flatMap。

5、Map一對一

6、Flatmap一對多

7、map和flatMap的方法聲明是不一樣的

(1) <r> Stream<r> map(Function mapper);

(2) <r> Stream<r> flatMap(Function> mapper);

(3) map和flatMap的區別:我個人認為,flatMap的可以處理更深層次的數據,入參為多個list,結果可以返回為一個list,而map是一對一的,入參是多個list,結果返回必須是多個list。通俗的說,如果入參都是對象,那麼flatMap可以操作對象裡面的對象,而map只能操作第一層。

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


Reduce

1、感覺類似遞歸

2、數字(字符串)累加

3、個人沒咋用過

Java 8中Stream API的這些奇技!你都Get到了嗎?



Java 8中Stream API的這些奇技!你都Get到了嗎?


Collect

1、collect在流中生成列表,map,等常用的數據結構

2、toList()

3、toSet()

4、toMap()

5、自定義


Java 8中Stream API的這些奇技!你都Get到了嗎?


Optional

1、Optional 是為核心類庫新設計的一個數據類型,用來替換 null 值。

2、人們對原有的 null 值有很多抱怨,甚至連發明這一概念的Tony Hoare也是如此,他曾說這是自己的一個“價值連城的錯誤”

3、用處很廣,不光在lambda中,哪都能用

4、Optional.of(T),T為非空,否則初始化報錯

5、Optional.ofNullable(T),T為任意,可以為空

6、isPresent(),相當於 !=null

7、ifPresent(T), T可以是一段lambda表達式 ,或者其他代碼,非空則執行


Java 8中Stream API的這些奇技!你都Get到了嗎?


併發

1、stream替換成parallelStream或 parallel

2、輸入流的大小並不是決定並行化是否會帶來速度提升的唯一因素,性能還會受到編寫代碼的方式和核的數量的影響

3、影響性能的五要素是:數據大小、源數據結構、值是否裝箱、可用的CPU核數量,以及處理每個元素所花的時間


Java 8中Stream API的這些奇技!你都Get到了嗎?


調試

1、list.map.fiter.map.xx 為鏈式調用,最終調用collect(xx)返回結果

2、分惰性求值和及早求值

3、判斷一個操作是惰性求值還是及早求值很簡單:只需看它的返回值。如果返回值是 Stream,那麼是惰性求值;如果返回值是另一個值或為空,那麼就是及早求值。使用這些操作的理想方式就是形成一個惰性求值的鏈,最後用一個及早求值的操作返回想要的結果。

4、通過peek可以查看每個值,同時能繼續操作流


Java 8中Stream API的這些奇技!你都Get到了嗎?


"

相關推薦

推薦中...