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

问题描述 投票:0回答:1

有一个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询问生产者是否还有更多可用项目,以及是否没有任何项目进入关闭顺序。

现在关注此问题。

此刻有一个for-loop循环充当生产者:

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

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

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

consumer.shutdown();

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

java concurrency producer-consumer
1个回答
1
投票
如果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(); } }

© www.soinside.com 2019 - 2024. All rights reserved.