概述
獲取Stream流
集合的stream流
集合名.stream( );
collection集合
List集合與Set集合都屬于Collection集合,因此可以直接調用stream方法獲取stream流,示例如下
結果===>
map集合
map集合存在鍵值對,因此無法使用該方法直接獲取stream流,可以采用如下兩種方法
- 分別將鍵與值裝入到set集合中,再取得他們各自的stream流,對其進行操作
- 通過通過 map.enterySet( ) 方法將他們封裝成鍵值對 對象,再將這些鍵值對都裝入set集合,這樣就可以使用collection集合的stream流獲取方法對其進行操作了
數組的stream流
Arrays.stream(數組名) 或 Stream.of(數組名)? ? ?兩種方法均可,如下圖
stream流的中間方法
調用完中間方法后返回的還是一個stream流
map方法
可以理解成一種加工操作,比如遍歷的是對象,想要獲取對象的名字,就可以用map方法得到名字的stream流并返回,如下
注:下圖是采用方法引用簡化過的,原來是? map(s -> s.getName() ),用意就是得到students對象中的所有名字
distinct方法
可以去除stream流中的重復元素,如果需要去重的是自定義對象,如同之前學習過的 去重機制 ,需要在該對象類中重寫 equals方法 與 hashcode方法 (右鍵generate生成即可)
stream流的終結方法
調用終結方法后就沒有stream流了
max 與 min 方法
如果需要找的最大值或最小值是一個對象,則需要對comparator重寫,如下
收集stream流方法
畢竟stream流的作用就是來簡化操作集合、數組的代碼的,集合、數組才是開發中要使用的東西,因此經常需要將stream流的結果轉換回集合或數組
收集到Collection集合
使用 collect(Collectors.toList()); 就是收集為List集合,使用 collect(Collectors.toSet()); 就是收集為Set集合,示例如下
注:stream流只能收集一遍,當收集完后stream流就會關閉,因此不能取出stream流后分別收集,會報錯,具體示例如下:
當第一次使用studentStream.collect之后,stream流已經被關閉了,因此第二段set收集會出錯
收集到Map集合
由于不知道收集后的鍵與值分別取誰,因此需要進行聲明,collect(Collectors.toMap( a -> 鍵, a -> 值?));? 示例如下,將學生的姓名作為鍵,學生的身高作為值
注:該方法無法幫忙去重,如果收集的對象中出現了重復的會報異常,因此最后在收集為map集合前使用 distinc( ) 去重,示例如下:
收集到數組
toArray( )? 即可,示例如下:
如果想要具體聲明是什么類型的數組,則需要進一步在toArray()中聲明,具體如下