java流是否多次迭代值流?例如,如果我們先過濾然后映射,流是否會迭代一次過濾,然后再次迭代映射?或者它只是在迭代流一次時過濾和映射每個元素?
uj5u.com熱心網友回復:
后者,每個中間操作對流過流的每個專案應用一次。驗證自己很容易:只需在每個步驟中添加列印陳述句。
Stream.of(1,2,3,4,5)
.filter(x -> {
System.out.println("Filtering " x);
return x < 4;
})
.map(x -> {
System.out.println("Mapping " x);
return x * 2;
})
.forEach(System.out::println);
輸出:
Filtering 1
Mapping 1
2
Filtering 2
Mapping 2
4
Filtering 3
Mapping 3
6
Filtering 4
Filtering 5
“流”作為一個整體并不存在。流可以是無限的。只要沒有人消費流,就沒有值流過流。沒有消費者 = 沒有過濾,沒有映射。流的消費者是它的終端操作。
只有在呼叫終端操作時,流才會從其源中獲取第一個元素,并根據需要一步一步地饋送它。并非所有元素都必須到達終端操作(它們可能已被過濾掉)。
一些流操作需要消耗整個流,然后才能將元素傳遞到下游,例如sorted
. 如果不知道所有值,就不可能進行排序。但是大多數流操作可以對單個元素進行操作并產生 0 個或多個新元素。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/518606.html
標籤:爪哇java流