Cómo convertir un bucle for en un productor?

Denis Kulagin:

Hay una SynchronousProducer interfaz, que soporta dos operaciones:

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

Consumidor pide al productor si hay más elementos disponibles y si no entra en una secuencia de apagado.

Ahora sigue el tema.

Por el momento no es un para-loop ciclo que actúa como un productor:

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

La tarea consiste en convertir un código de control en el siguiente:

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

consumer.shutdown();

La pregunta. Teniendo en cuenta los elementos : la forma de escribir el productor implementar SynchronousProducer interfaz y la duplicación de la lógica del ciclo for se muestra arriba?

Joni:

Si itemsimplementos Iterable, puede adaptarlo a su interfaz SynchronousProducer como esto:

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

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=389468&siteId=1
Recomendado
Clasificación