“和方法使一個更小。他們可以使有限流變小,或者他們可以從無限流中制造有限流。方法簽名如下所示:limit()skip()StreamStream<T> limit(int maxSize)
Stream<T> skip(int n)以下代碼 c....”以上摘自OCP java 8書。當它說“可以從無限流中產生有限流”時,他們是同時還是單獨使用這兩種方法?我可以想象如何使無限流變小,但如何單獨實現這一目標?有沒有辦法或文檔中的措辭需要更清晰?limit()skip()
2 回答

慕雪6442864
TA貢獻1812條經驗 獲得超5個贊
“可以從無限流中產生有限流”肯定僅適用于,而不適用于 .limit()
skip()
skip
就像從海洋中取出一杯水,然后想知道“海洋中還剩下多少水?”,而這就像從中取出同一杯水,然后想知道“我從海洋中取了多少水?limit
如果流是無限的,那么跳過許多元素仍然會給你留下無限的流......
Stream.iterate(0L, i -> i + 1).skip(100).forEach(System.out::println);
從理論上講,這將永遠運行。因此,很可能只是一個小小的不準確之處,逃脫了這本書的評論者。

阿晨1998
TA貢獻2037條經驗 獲得超6個贊
如果您仔細查看Java文檔,您會發現,因為提到它是一個短路操作。這意味著一旦滿足給定的標準,它可能不會對源流的所有元素進行操作,它將退出。因此,這適用于將無限流更改為有限流。limit(long maxSize)
返回由此流的元素組成的流,該流被截斷為長度不超過 maxSize。
這是一種短路狀態的中間操作。
另一方面,該方法沒有提出這樣的要求,因此基本上在跳過n個元素之后,Stream仍然可以是無限的:skip(long n)
在丟棄流的前 n 個元素后,返回由此流的其余元素組成的流。如果此流包含的元素少于 n 個,則將返回一個空流。
這是有狀態的中間操作。
所以你正在讀的書對方法的措辭不正確。skip
添加回答
舉報
0/150
提交
取消