如何将 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();
}
}
有一个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();
}
}