tl; dr
キャストするだけで、変換する必要はありません。
にキャストStream < String >
しIterable < String >
ます。
細部
注意ストリームバックを使用することの危険性を説明するHolgerの回答を参照してくださいIterable
。
はい、あなたはIterable
から作ることができますStream
。
解決策は簡単ですが、明白ではありません。Maurice NaftalinのLambda FAQのこの投稿を参照してください。
iterator()
上の方法BaseStream
(のスーパークラスStream
)を返すIterator
の同じ名前と一致するように起こるiterator()
戻す方法Iterator
によって必要とされるIterable
インターフェース。メソッドシグネチャが一致します。私たちが実際にキャストすることができるようStream
にIterable
、変換は必要ありません。
入力を行います。
String input = "this\n" +
"that\n" +
"the_other";
Stream < String > stream = input.lines() ;
それStream<String>
をにキャストしてくださいIterable<String>
。
Iterable< String > iterable = ( Iterable < String > ) stream ; // Cast `Stream < String >` to `Iterable < String >`.
結果をテストします。
for ( String s : iterable )
{
System.out.println( "s = " + s );
}
IdeOne.comでこのコードがライブで実行されるのをご覧ください。
s =これ
s =それ
s = the_other
警告ストリームバックのリスクに注意してくださいIterable
。Holgerによる正しい回答で説明されています。