Stream的SKIP方法可以使无限流有限吗?

“和方法使一个更小。他们可以使有限流变小,或者他们可以从无限流中制造有限流。方法签名如下所示:limit()skip()Stream

Stream<T> limit(int maxSize)
Stream<T> skip(int n)

以下代码 c....”

以上摘自OCP java 8书。当它说“可以从无限流中产生有限流”时,他们是同时还是单独使用这两种方法?我可以想象如何使无限流变小,但如何单独实现这一目标?有没有办法或文档中的措辞需要更清晰?limit()skip()


萧十郎
浏览 113回答 2
2回答

慕雪6442864

“可以从无限流中产生有限流”肯定仅适用于,而不适用于 .limit()skip()skip就像从海洋中取出一杯水,然后想知道“海洋中还剩下多少水?”,而这就像从中取出同一杯水,然后想知道“我从海洋中取了多少水?limit如果流是无限的,那么跳过许多元素仍然会给你留下无限的流......Stream.iterate(0L,&nbsp;i&nbsp;->&nbsp;i&nbsp;+&nbsp;1).skip(100).forEach(System.out::println);从理论上讲,这将永远运行。因此,很可能只是一个小小的不准确之处,逃脱了这本书的评论者。

阿晨1998

如果您仔细查看Java文档,您会发现,因为提到它是一个短路操作。这意味着一旦满足给定的标准,它可能不会对源流的所有元素进行操作,它将退出。因此,这适用于将无限流更改为有限流。limit(long maxSize)返回由此流的元素组成的流,该流被截断为长度不超过 maxSize。这是一种短路状态的中间操作。另一方面,该方法没有提出这样的要求,因此基本上在跳过n个元素之后,Stream仍然可以是无限的:skip(long n)在丢弃流的前 n 个元素后,返回由此流的其余元素组成的流。如果此流包含的元素少于 n 个,则将返回一个空流。这是有状态的中间操作。所以你正在读的书对方法的措辞不正确。skip
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java