为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

萧十郎 2022-08-17 17:22:03
“和方法使一个更小。他们可以使有限流变小,或者他们可以从无限流中制造有限流。方法签名如下所示: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);

从理论上讲,这将永远运行。因此,很可能只是一个小小的不准确之处,逃脱了这本书的评论者。


查看完整回答
反对 回复 2022-08-17
?
阿晨1998

TA贡献2037条经验 获得超6个赞

如果您仔细查看Java文档,您会发现,因为提到它是一个短路操作。这意味着一旦满足给定的标准,它可能不会对源流的所有元素进行操作,它将退出。因此,这适用于将无限流更改为有限流。limit(long maxSize)

返回由此流的元素组成的流,该流被截断为长度不超过 maxSize。

这是一种短路状态的中间操作。

另一方面,该方法没有提出这样的要求,因此基本上在跳过n个元素之后,Stream仍然可以是无限的:skip(long n)

在丢弃流的前 n 个元素后,返回由此流的其余元素组成的流。如果此流包含的元素少于 n 个,则将返回一个空流。

这是有状态的中间操作。

所以你正在读的书对方法的措辞不正确。skip


查看完整回答
反对 回复 2022-08-17
  • 2 回答
  • 0 关注
  • 112 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信