gpt4 book ai didi

java - Stream#limit 可以返回比预期更少的元素吗?

转载 作者:搜寻专家 更新时间:2023-11-01 01:21:12 24 4
gpt4 key购买 nike

如果下面的s流至少有n个元素,在什么情况下流sLimit可能少于 n 个元素,如果有的话?

Stream sLimit = s.limit(n);

提问原因:在this answer ,我读到:

Despite the appearances, using limit(10) doesn't necessarily result in a SIZED stream with exactly 10 elements -- it might have fewer.

最佳答案

你误解了这个说法。如果 Stream 至少有 n 个元素,并且您对其调用 limit(n),它将正好有 n 元素,但 Stream 实现 可能不知道它,因此性能不尽如人意。

相比之下,某些 Stream 源(Spliterators)肯定知道它们具有固定大小,例如创建 Stream for an array 时或 IntStream 通过 IntStream.range .与具有 limit(n)Stream 相比,它们可以得到更好的优化。

当您通过 Stream.generate(MyClass::new).limit(10) 创建一个parallel Stream 时,构造函数仍将顺序调用,只有后续操作可以并行运行。相反,当使用 IntStream.range(0, n).mapToObj(i -> new MyClass()) 时,整个 Stream 操作,包括构造函数调用,可以并行运行。

关于java - Stream#limit 可以返回比预期更少的元素吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28094705/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com