を返すインターフェースがあります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
(この質問)はそれほど痛くありません。