相关疑难解决方法(0)

为什么 stream.spliterator() 的 tryAdvance 可能会将项目累积到缓冲区中?

SpliteratorStream管道中获取 a可能会返回StreamSpliterators.WrappingSpliterator的实例。例如,得到以下内容Spliterator

Spliterator<String> source = new Random()
            .ints(11, 0, 7) // size, origin, bound
            .filter(nr -> nr % 2 != 0)
            .mapToObj(Integer::toString)
            .spliterator();
Run Code Online (Sandbox Code Playgroud)

鉴于上述情况Spliterator<String> source,当我们通过 的tryAdvance (Consumer<? super P_OUT> consumer)方法(Spliterator在本例中为StreamSpliterators.WrappingSpliterator的实例)单独遍历元素时,它将首先将项目累积到内部缓冲区中,然后再消费这些项目,如我们在StreamSpliterators.java所见#298。从简单的角度来看,doAdvance()首先将项目插入到buffer,然后获取下一个项目并将其传递给consumer.accept (…)

public boolean tryAdvance(Consumer<? super P_OUT> consumer) {
    boolean hasNext = doAdvance();
    if (hasNext)
        consumer.accept(buffer.get(nextToConsume));
    return hasNext;
}
Run Code Online (Sandbox Code Playgroud)

但是,我没有弄清楚 this 的需要buffer

在这种情况下,为什么不简单地将 的 …

java java-8 java-stream

7
推荐指数
3
解决办法
906
查看次数

标签 统计

java ×1

java-8 ×1

java-stream ×1