在對於一個 Stream 進行屢次轉換操做 (Intermediate 操做),每次都對 Stream 的每一個元素進行轉換,並且是執行屢次,這樣時間複雜度就是 N(轉換次數)個 for 循環裏把全部操做都作掉的總和嗎?其實不是這樣的,轉換操做都是 lazy 的,多個轉換操做只會在 Terminal 操做的時候融合起來,一次循環完成。咱們能夠這樣簡單的理解,Stream 裏有個操做函數的集合,每次轉換操做就是把轉換函數放入這個集合中,在 Terminal 操做的時候循環 Stream 對應的集合,而後對每一個元素執行全部的函數。java
還有一種操做被稱爲 short-circuiting。用以指:ide
當操做一個無限大的 Stream,而又但願在有限時間內完成操做,則在管道內擁有一個 short-circuiting 操做是必要非充分條件。函數
int sum = widgets.stream() .filter(w -> w.getColor() == RED) .mapToInt(w -> w.getWeight()) .sum();
stream() 獲取當前小物件的 source,filter 和 mapToInt 爲 intermediate 操做,進行數據篩選和轉換,最後一個 sum() 爲 terminal 操做,對符合條件的所有小物件做重量求和。ui
map (mapToInt, flatMap 等)、 filter、 distinct、 sorted、 peek、 limit、 skip、 parallel、 sequential、 unorderedblog
forEach、 forEachOrdered、 toArray、 reduce、 collect、 min、 max、 count、 anyMatch、 allMatch、 noneMatch、 findFirst、 findAny、 iteratorip
anyMatch、 allMatch、 noneMatch、 findFirst、 findAny、 limitci