下面的代碼會篩選元素,直到找到 3 個通過篩選方法的元素,還是篩選所有元素?manyItems.stream()
.filter(it -> it.getValue > 100)
.limit(3)
...
2 回答

慕桂英546537
TA貢獻1848條經驗 獲得超10個贊
filter()
具有惰性執行。這意味著當你調用它時,它實際上并沒有做任何正確的事情。相反,它只是返回一個新的,它將包含遍歷時與給定元素匹配的元素。Stream
Predicate
由于是短路狀態的中間操作,因此它將處理直到它達到極限和短路。這意味著當您調用 時,它將在遍歷時返回僅包含元素的新 Stream。由于只有遍歷足以達到給定的大小,因此實際上只會過濾掉所需數量的元素。limit()
Stream
filter
limit
filter
我們可以通過調用來測試這一點:peek()
Arrays.stream(new int[] {1, 2, 2, 2, 2}) .filter(e-> e > 1) .peek(System.out::println) .limit(3) .average();
(其中可以是任何本身不會短路的終端操作)average()
哪些輸出:
2 2 2
(請注意,調用后最后兩個不會出現filter()
)
添加回答
舉報
0/150
提交
取消