Java 8 JDKを使用してIterableをストリームに変換する 質問する

Java 8 JDKを使用してIterableをストリームに変換する 質問する

を返すインターフェースがありますjava.lang.Iterable<T>

その結果を Java 8 Stream API を使用して操作したいと思います。

ただし、Iterable は「ストリーミング」できません。

Iterable を List に変換せずに Stream として使用する方法をご存知ですか?

ベストアンサー1

Iterableメソッドがありspliterator()、これをStreamSupport.streamストリームを作成するには:

StreamSupport.stream(iterable.spliterator(), false)
             .filter(...)
             .moreStreamOps(...);

これは、直接 を使用するよりもはるかに良い答えですspliteratorUnknownSize。簡単で、より良い結果が得られます。最悪の場合でも、同じコードになります (デフォルトの実装では を使用しますspliteratorUnknownSize)。しかし、より一般的なケースでは、 がIterableすでにコレクションであるため、より優れたスプリッテレータが得られ、したがって、ストリームのパフォーマンスが向上します (並列処理も良好になる可能性があります)。コードも少なくなります。

ご覧のとおり、ストリームを取得するとIterableこの質問)はそれほど痛くありません。

おすすめ記事