“和方法使一个更小。他们可以使有限流变小,或者他们可以从无限流中制造有限流。方法签名如下所示: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
提交
取消