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
受け取ったときに驚く可能性があります。Iterable
Exception
for (element : iterable)