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

标签 java concurrency producer-consumer

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

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();
}

消费者询问生产者是否有更多可用的元素,如果没有则进入关闭序列。

现在讨论问题。

目前有一个for-loop循环充当生产者:

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

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

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

consumer.shutdown();

问题。给定项目:如何编写实现SynchronousProducer接口(interface)的生产者并复制上面所示的for循环的逻辑?

最佳答案

如果 items 实现 Iterable,您可以将其调整为 SynchronousProducer 接口(interface),如下所示:

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();
    }
}

关于java - 如何将for循环转换为生产者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60994150/

相关文章:

java - 如何使用 JAVA API 从 Kafka 获取每个主题的消息数

java - 如何让我的 map 加载到 j2me 中?

java - 如何获取完全加载页面的 html(使用 javascript)作为 java 中的输入?

performance - Clojure core.async 用于数据计算

ios - 在 UITableView 的单元格中下载图像的最佳实践?苹果/swift

java - N+1 HTTP 调用通过同时队列进行批处理

java - 如何从 Android 应用程序的 Java 代码配置 Pushwoosh

java - 类型不匹配,Spring BindException

java - Java中的生产者/消费者 : keeping it balanced

apache-kafka - 发送视频文件时,生产者和消费者通常如何工作?