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