如何将 for 循环转换为生产者?

How to convert a for-loop into a producer?

有一个SynchronousProducer接口,支持两种操作:

public interface SynchronousProducer<ITEM> {
    /**
     * Produces the next item.
     *
     * @return produced item
     */
    ITEM next();

    /**
     * Tells if there are more items available.
     *
     * @return true if there is more items, false otherwise
     */
    boolean hasNext();
}

Consumer 询问生产者是否有更多物品可用,以及 none 是否进入关闭序列。

现在关注这个问题。

目前有一个for-loop循环作为生产者:

for (ITEM item: items) {
  consumer.consume(item);
}

任务是将控制代码转换为以下内容:

while (producer.hasNext()) {
  consumer.consume(producer.next())
}

consumer.shutdown();

问题。给定items:如何编写实现SynchronousProducer接口的生产者并复制上面显示的 for 循环的逻辑?

如果 items 实现了 Iterable,您可以像这样使其适应您的 SynchronousProducer 接口:

class IterableProducer<T> implements SynchronousProducer<T> {

    private Iterator<T> iterator;

    public IterableProducer(Iterable<T> iterable) {
        iterator = iterable.iterator();
    }

    @Override
    public T next() {
        return iterator.next();
    }

    @Override
    public boolean hasNext() {
        return iterator.hasNext();
    }
}