ストリームがなぜ Iterableを実装しない ? 質問する

ストリームがなぜ Iterableを実装しない ? 質問する

Java 8ではクラスがありますストリーム<T>、不思議なことに、方法がある

Iterator<T> iterator()

したがって、インターフェースを実装することが期待されます反復可能<T>、まさにこの方法が必要ですが、そうではありません。

foreachループを使用してストリームを反復処理したい場合、次のようにする必要があります。

public static Iterable<T> getIterable(Stream<T> s) {
    return new Iterable<T> {
        @Override
        public Iterator<T> iterator() {
            return s.iterator();
        }
    };
}

for (T element : getIterable(s)) { ... }

何か見逃しているのでしょうか?

ベストアンサー1

すでに同じ質問をしている人がいますメーリングリスト☺. 主な理由は、Iterable には再反復可能なセマンティクスもありますが、Stream にはそれがないからです。

Iterable主な理由は、 は再利用性を意味するのに対し、 はStream一度しか使用できないもの、つまり のようなものだということだと思いますIterator

Stream拡張された場合、既存のコードは、 を2 回目にスローする をIterable受け取ったときに驚く可能性があります。IterableExceptionfor (element : iterable)

おすすめ記事