Зачем тут yield?
public class BFSIterator implements Iterator<BFSIterator.Item> {
private Queue<Item> queue;
public BFSIterator(Item root) {
this.queue = new LinkedList<Item>();
this.queue.add(root);
}
@Override
public boolean hasNext() {
return queue.size() > 0;
}
@Override
public Item next() {
Item item = queue.remove();
for(Item child : item.children()) {
queue.add(child);
}
return item;
}
@Override
public void remove() {
throw new UnsupportedOperationException();
}
public interface Item {
Collection<Item> children();
}
}