8

的 javadocSpliterator提到:

Spliterator 可以单独遍历元素(tryAdvance())或批量顺序遍历元素(forEachRemaining())。

然后我们转到javadoc,tryAdvance()其中说:

如果存在剩余元素,则对其执行给定的操作,返回 true;否则返回假。

也许我在某个地方误读了,但在我看来,如果剩下一个或多个Consumer元素,作为参数应该只.accept()在返回之前的每个参数true,并且如果说,我有两个参数立即可用,那么我不能:

action.accept(arg1);
action.accept(arg2);
return true;

这个项目中,我重写了广度优先拆分器,现在它显示为:

// deque is a Deque<Iterator<T>>

@Override
public boolean tryAdvance(final Consumer<? super T> action)
{
    Iterator<T> iterator;
    T element;

    while (!deque.isEmpty()) {
        iterator = deque.removeFirst();
        while (iterator.hasNext()) {
            element = iterator.next();
            deque.add(fn.apply(element));
            action.accept(element);
        }
    }
    return false;
}

简而言之,我action接受所有参数,然后返回 false... 并且测试虽然很简单,但仍然成功(链接)。

请注意,.trySplit()总是返回null; 并且分离器具有特征DISTINCT和。ORDEREDNONNULL

那么,是否存在由于上述方法一次消耗所有元素而导致上述代码无法工作的流使用?

4

1 回答 1

10
于 2016-04-28T18:50:07.223 回答