java8特性——Stream API

什麼是Stream?

   Stream是一些數據上的抽象視圖。

  舉例來說,Stream可以是列表、文件中的每行數據,或者其他任意元素的序列的一個視圖。Stream API提供了可以連續執行,或者並行執行的操作集合。

  開發者需要記住的是Stream是一個高層的抽象,而不是一個數據結構。Stream不會存儲你的數據。 Stream本身是懶惰的,只有使用到它們時纔會開始計算。這使我們能夠產生無數的數據流。

  在Java8中,你能夠像下面一樣編寫一個Stream來產生無數的唯一標識碼。

public static void main(String[] args) {
    Stream<String> uuidStream = Stream.generate(() -> UUID.randomUUID().toString());
}

  在Stream的接口中,有很多像of、generate和iterate一樣的靜態工廠方法,它們可以用來創建Stream的實例。上面展示的generate方法以Supplier爲參數。Supplier是一個函數式接口,用來描述一個不需要參數並返回一個值的函數。我們傳遞給generate方法一個供應者,那麼當調用的時候,就能產生一個唯一標識碼。
  

怎麼用Stream?

  一個Stream表面上與一個集合很類似,允許你改變和獲取數據,但實際上卻有很大區別:

  1、Stream自己不會存儲元素。元素可能被存儲在底層的集合中,或者根據需要產生出來。

  2、Stream操作符不會改變源對象。相反,他們返回一個持有新結果的Stream。

  3、Stream操作符可能是延遲執行的。意思是它們會等到需要結果的時候才執行。

  Stream遵循“做什麼,而不是怎麼去做”的原則。只需要描述需要做什麼,而不用考慮程序是怎樣實現的。

  Stream很像Iterator,單向,只能遍歷一遍。但是Stream可以只通過一行代碼就實現多線程的並行計算。

  當使用Stream時,會有三個階段:

  1、創建一個Stream。

  2、在一個或多個步驟中,將初始Stream轉化到另一個Stream的中間操作。

  3、使用一個終止操作來產生一個結果。該操作會強制他之前的延遲操作立即執行。在這之後,該Stream就不會在被使用了。

  
  

Stream的操作

  中間操作包括:map (mapToInt, flatMap 等)、 filter、distinct、sorted、peek、limit、skip、parallel、sequential、unordered。

  終止操作包括:forEach、forEachOrdered、toArray、reduce、collect、min、max、count、anyMatch、allMatch、noneMatch、findFirst、findAny、iterator。

  
  
  
  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章