“limit()和skip()方法使Stream变小。它们可以使有限流变小,也可以使有限流从无限流中产生。方法签名如下所示:
Stream<T> limit(int maxSize)
Stream<T> skip(int n)以下代码c.“
以上是OCP 8书的摘录。当它说“可以从无限的溪流中产生一条有限的流”时,他们是指在这两种方法中一起还是单独的?我可以想象limit()将如何使无限流变小,但仅凭skip()是如何做到这一点的呢?文档中是否有更清晰的方式或措辞?
发布于 2019-03-18 06:06:34
“可以从无限流中生成有限流”肯定只适用于limit(),而不适用于skip()。
skip就像是从海里拿了一杯水,然后想知道“海洋里还剩多少水?”,而limit就像从海洋中拿出同样的一杯水,然后想“我从海里取了多少水?”
如果流是无限的,那么跳过许多元素仍然会给您留下无限的流.
Stream.iterate(0L, i -> i + 1).skip(100).forEach(System.out::println);理论上这将永远持续下去。因此,这本书的评审员很可能只是一个小小的不准确。
发布于 2019-03-18 06:07:05
如果仔细查看Java,就会发现对于limit(long maxSize)来说,它是一个短路操作。这意味着,只要满足给定的条件,它可能不会在源流的所有元素上操作,它就会退出。因此,这在将无限流转换为有限流时起作用。
返回由此流的元素组成的流,截断后的流长度不超过maxSize。 这是一个short-circuiting有状态的中间操作。
另一方面,skip(long n)方法没有这样的声明,因此基本上在跳过n个元素之后,流仍然是无限的:
在丢弃流的前n个元素后,返回由该流的其余元素组成的流。如果此流包含少于n个元素,则将返回一个空流。 这是一个有状态的中间操作。
因此,您正在阅读的书中关于skip方法的措辞是不正确的。
https://stackoverflow.com/questions/55215252
复制相似问题