両方ともパラメーターとしてコンシューマーを取得します。 Java 8がTime APIで行われたような混乱を回避するためのものである場合、なぜそれが新しい混乱を追加したのですか?または、いくつかのポイントが欠けていますか?
2つの方法がどちらも存在する理由を理解するには、最初にIterator
とIterable
を理解する必要があります。
Iterator
は、基本的には「次の要素」を持ち、通常は末尾を持つものです。
Iterable
は、有限または無限シーケンスの要素を含むものであり、次の要素を取得し続けることで反復を超えることができます。つまり、Iterable
sはIterator
sによって反復できます。
これが理解できたので、問題の2つの方法の違いについてお話ししましょう。
例として配列リストを使用してみましょう。これは配列リストの中にあるものです:
_[1, 3, 6, 8, 0]
_
Iterable.forEach()
を呼び出してSystem.out::print()
を渡すと、_13680
_が出力されます。これは、_Iterable.forEach
_が要素のシーケンス全体を反復処理するためです。
一方、配列リストのIterator
を取得してnext
を2回呼び出した場合、forEachRemaining
をSystem.out::print()
で呼び出す前に、_680
_が出力されます。 Iterator
はすでに最初の2つの要素を繰り返し処理したため、「残りの」要素は6、8、0です。