1. ホーム
  2. java

[解決済み] Java 8 JDK を使用して、Iterable を Stream に変換する

2022-03-21 13:44:22

質問

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

その結果を、Java 8 Stream APIを使って操作したい。

しかし、Iterableはquot;stream"することができません。

IterableをListに変換せずにStreamとして使用する方法はありますか?

どのように解決するのですか?

を使うよりもずっと良い答えがあります。 spliteratorUnknownSize を直接指定する方が簡単で、より良い結果を得ることができます。 Iterable には spliterator() メソッドがあるので、それを使ってスプリテータを取得すればよいのです。 最悪の場合、同じコード (デフォルトの実装では spliteratorUnknownSize ) が、より一般的なケースでは、あなたの Iterable がすでにコレクションである場合、より優れたスプリテータが得られるので、ストリームのパフォーマンスが向上します (おそらく並列化もうまくいくでしょう)。 また、コードも少なくなります。

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

ご覧の通り、ストリームを Iterable (参照 本題 )はあまり痛くない。