/ /グアバサイクルどのように達成されます - java、グアバ

グアバサイクルはどのように達成されたのですか? - java、guava

私は、Guavaが無限に循環するイテレータをどのように作成しているのか把握しようとしていますが、わかりません。

public static <T> Iterable<T> cycle(final Iterable<T> iterable) {
checkNotNull(iterable);
return new FluentIterable<T>() {
@Override
public Iterator<T> iterator() {
return Iterators.cycle(iterable);
}
@Override public String toString() {
return iterable.toString() + " (cycled)";
}
};
}

public static <T> Iterator<T> cycle(final Iterable<T> iterable) {
checkNotNull(iterable);
return new Iterator<T>() {
Iterator<T> iterator = emptyIterator();
Iterator<T> removeFrom;

@Override
public boolean hasNext() {
if (!iterator.hasNext()) {
iterator = iterable.iterator();
}
return iterator.hasNext();
}
@Override
public T next() {
if (!hasNext()) {
throw new NoSuchElementException();
}
removeFrom = iterator;
return iterator.next();
}
@Override
public void remove() {
checkRemove(removeFrom != null);
removeFrom.remove();
removeFrom = null;
}
};

}

ただし、これがどの程度正確に達成されたかはわかりません。私はおそらく何かを逃しています。

回答:

回答№1の場合は3

コードのこの部分

if (!iterator.hasNext()) {
iterator = iterable.iterator();
}

古いイテレータに要素がないかどうかをチェックします。これが真実であれば、単に新しいイテレーターが得られます。