首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >流的跳过法能使无限流有限吗?

流的跳过法能使无限流有限吗?
EN

Stack Overflow用户
提问于 2019-03-18 05:51:32
回答 2查看 75关注 0票数 3

limit()skip()方法使Stream变小。它们可以使有限流变小,也可以使有限流从无限流中产生。方法签名如下所示:

代码语言:javascript
运行
复制
Stream<T> limit(int maxSize)
Stream<T> skip(int n)

以下代码c.“

以上是OCP 8书的摘录。当它说“可以从无限的溪流中产生一条有限的流”时,他们是指在这两种方法中一起还是单独的?我可以想象limit()将如何使无限流变小,但仅凭skip()是如何做到这一点的呢?文档中是否有更清晰的方式或措辞?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-18 06:06:34

“可以从无限流中生成有限流”肯定只适用于limit(),而不适用于skip()

skip就像是从海里拿了一杯水,然后想知道“海洋里还剩多少水?”,而limit就像从海洋中拿出同样的一杯水,然后想“我从海里取了多少水?”

如果流是无限的,那么跳过许多元素仍然会给您留下无限的流.

代码语言:javascript
运行
复制
Stream.iterate(0L, i -> i + 1).skip(100).forEach(System.out::println);

理论上这将永远持续下去。因此,这本书的评审员很可能只是一个小小的不准确。

票数 4
EN

Stack Overflow用户

发布于 2019-03-18 06:07:05

如果仔细查看Java,就会发现对于limit(long maxSize)来说,它是一个短路操作。这意味着,只要满足给定的条件,它可能不会在源流的所有元素上操作,它就会退出。因此,这在将无限流转换为有限流时起作用。

返回由此流的元素组成的流,截断后的流长度不超过maxSize。 这是一个short-circuiting有状态的中间操作。

另一方面,skip(long n)方法没有这样的声明,因此基本上在跳过n个元素之后,流仍然是无限的:

在丢弃流的前n个元素后,返回由该流的其余元素组成的流。如果此流包含少于n个元素,则将返回一个空流。 这是一个有状态的中间操作。

因此,您正在阅读的书中关于skip方法的措辞是不正确的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55215252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档